2012-05-22 25 views
4

我開發了一個android應用程序,它有一組活動和一個後臺服務運行。我將一些應用程序數據保存到設備的內部存儲器中,因此當用戶從設置 - >應用程序 - >清除數據按鈕單擊清除數據選項時,保存在內部存儲器中的所有數據都將被清除。 當用戶點擊我的應用程序的服務或廣播接收機類中的清除數據按鈕時,我必須捕獲清除數據單擊事件或操作(如果有的話),任何人都可以建議設備點擊清除數據應用程序,所以我可以在我的應用程序廣播接收器類中捕獲該操作並執行所需任務有沒有什麼辦法在應用程序中以編程方式捕獲清除數據操作?

請給我一些例子的決議。

問候, 皮克斯

回答

2

我要拍攝的清除數據點擊事件或行動(如有提供)時,在我的應用程序的服務,或在廣播接收器類清除數據按鈕用戶點擊,任何人都可以表明,是否有任何設備點擊應用程序清除數據時引發的任何操作,以便我可以在我的應用程序廣播接收器類中捕獲該操作並執行所需的任務?

沒有。 AFAIK,按清除數據也會停止你的過程,所以你的代碼不會運行。您會將用戶按下清除數據視爲與用戶第一次安裝您的應用程序的情況相同。

+0

是的,我的假設也是一樣的,但我在三星Galaxy Tab中遇到了一個奇怪的問題:當任何鬧鐘來自服務器時,我的應用程序會捕獲它並開始播放wav文件以通知用戶,但同時如果用戶轉到應用程序的信息,然後單擊清除數據按鈕,它應該停止音頻軌道,但它不會發生,所以如果您的聲明是真實的服務也應該停止意味着onDestroy shud調用服務,其中音頻軌道停止,但它沒有發生在這種情況下。爲什麼? – piks

+0

@piks:「它應該停止音頻軌道」 - 不一定。只要能夠訪問數據,它應該繼續播放。部分,這將是緩衝區的形式。如果文件被另一個進程打開,文件也可能不會被立即刪除,就像媒體播放的情況一樣。 – CommonsWare

+0

但我只在裝有Android 2.2(Froyo)的設備上遇到此問題,如Samsung Galaxy標籤,如果我在其他版本的Android 2.1,2.3及更高版本中重複此方案,則單擊清除數據按鈕時會發出嘟嘟聲也正在停止。 – piks

0

也許設立的廣播接收器在你的清單,並聽取了

「android.intent.action.PACKAGE_DATA_CLEARED」

意圖時,應用程序的數據是從設置清除是廣播。你應該能夠在android開發者網站上找到更多關於這方面的信息。

http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_DATA_CLEARED

+3

這不起作用,請在此處引用Android文檔,「請注意,已清除的軟件包未收到此廣播。」 – satheeshwaran

4

當應用程序已經運行的最佳方式將存儲在像「IS_DATA_CLEARED」 SharedPreferences值或當您保存所需全部信息,始終確保此值永遠不會在任何時間內撥弄應用程序的生命週期。

SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = appSharedPrefs.edit(); 
editor.putBoolean("IS_DATA_CLEARED",false); 
editor.apply(); 

然後每次都做下面的檢查。

SharedPreferences sharedPreferences = PreferenceManager 
      .getDefaultSharedPreferences(this); 
boolean IS_DATA_CLEARED = appSharedPrefs.getBoolean("IS_DATA_CLEARED",true); 

if(IS_DATA_CLEARED){ 
    //DATA IS CLEARED 
} 
else{ 
    //DATA IS NOT CLEARED 
} 
0

您可以做的是在清單文件的應用程序標記中使用以下屬性。

android:manageSpaceActivity=".path.to.MyActivity" 

這會將設置中的「清除數據」按鈕替換爲「管理空間」。 現在您可以將用戶重定向到由您控制的自定義活動。

該活動的啓動將作爲您的回撥。在您的活動中操作您的數據並使用以下代碼

private void clearPreferences() { 
    try { 
     // clearing app data 
     Runtime runtime = Runtime.getRuntime(); 
     runtime.exec("pm clear YOUR_APP_PACKAGE_GOES HERE"); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

清除應用程序數據。

相關問題