2011-02-14 50 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再次设置警报以检查每一分钟,因为警报通过电源周期不会持续

相关问题