2011-02-14 53 views
0

餘米的Android應用程序的工作。我存儲一些用戶信息在共享首選項。 我希望用戶不應該能夠從設置中清除應用程序的數據。可以嗎?Android的清除數據的應用程序

清單中有一個許可CLEAR_APP_USER_DATA我可以使用它嗎?

回答

5

我想用戶應該能夠從設置清除應用程序的數據。有可能嗎?

對不起,先生。用戶可以做任何他們想做的自己的手機,包括清除所有的數據,卸載應用程序等

+0

@Dongshengcn如果您還有其他信息需要添加,請在評論或其他答案中註釋 – 2011-02-14 15:39:35

0

我還沒有嘗試過,我知道這是一個老問題,但你可以在谷歌應用程序備份數據服務器(教程在這裏:http://developer.android.com/guide/topics/data/backup.html)。

然後在技術上,用戶仍然可以清除數據,但你可以使用報警監控。

所以,每當用戶存在於您的應用程序,你可以使用上面的教程,並堅持一個值sharedPreferences說,數據備份如下啓動服務來備份用戶的數據:

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences();//or name your own shared pref file 
SharedPreferences.Editor editor = pref.edit(); 
editor.putBoolean("dataIsBackedUp", true); 

然後做出正確的報警,以30秒或1分鐘火左右,將廣播發送到廣播接收器類,以檢查dataIsBackedUp的值,然後如果dataIsBackedUp返回false恢復數據。

要設置報警:(你會做這樣的應用程序本身和在廣播接收機)

Intent checkData = new Intent("MY_CUSTOM_INTENT_FILTER_NAME"); 
    PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 
0, checkData, PendingIntent.FLAG_CANCEL_CURRENT); 
     AlarmManager alarmMan = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 

Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.MINUTE, 1); 
alarmMan.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 

的BraodcastReceiver檢查數據:

public class smsReceived extends BroadcastReceiver { 


    @Override 
    public void onReceive(final Context context, Intent intent){ 

      SharedPreferences pref = PreferenceManager.getDefault();//or your own named shared prefs file 
      if (pref.get("dataIsBackedUp", false)){ 
       Intent restoreData = new Intent(context, backupAgent.class); 
       restoreData.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startService(restoreData); 
      } 
    } 
} 

而在你的清單:

<receiver android:name=".CheckData"> 
        <intent-filter> 
         <action android:name="MY_CUSTOM_INTENT_FILTER_NAME"/> 
        </intent-filter> 
        <intent-filter> 
         <action android:name="android.intent.action.BOOT_COMPLETED" /> 
        </intent-filter> 
       </receiver> 

在那裏,您指定BOOT_COMPLETED,以便您也可以檢查啓動,然後明星t再次設置警報以檢查每一分鐘,因爲警報通過電源週期不會持續

相關問題