如何重置桌面

在软件开发过程中,有时候会碰到需要重置桌面的情况。类似的效果为清空桌面程序的用户数据,这样系统会从defaultworkspace.xml文件重新读取桌面程序图标排列,让桌面按照我们的要求重置。

验证可行的方法:

  1. sharedUserid=android.uid.system;(经过测试设置成android.uid.packageinstaller也可以调用clear函数)
  1. 使用反射来获取清理桌面用户数据的方法;
  2. 为了使用该方法还需要定义一个类实现IPackageDataObserver接口。class PackageDataClearObserver implements IPackageDataObserver
  3. 还要在androidmanifest.xml里面声明权限:android.permission.CLEAR_APP_USER_DATA和android.permission.CLEAR_APP_CACHE
  4. 需要将eclipse里面编译出来的apk进行系统签名,因为它的行为类似系统管理程序行为了,即,清除应用的用户数据。

 

总的代码如下:

private voidrefreshDesk()
{
      ActivityManageram = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
 
try{
Log.i(TAG,"refreshDesk()----->clear user data");
MethodclearUserdata = am.getClass()
.getDeclaredMethod("clearApplicationUserData",
String.class,IPackageDataObserver.class);
clearUserdata.setAccessible(true);
clearUserdata.invoke(am, "com.android.launcher", new PackageDataClearObserver());
}catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
 
classPackageDataClearObserver implements IPackageDataObserver{
 
@Override
publicIBinder asBinder() {
//TODO Auto-generated method stub
returnnull;
}
 
@Override
publicvoid onRemoveCompleted(String arg0, boolean arg1)
throwsRemoteException {
//TODO Auto-generated method stub
}
}

之前由于没有定义实现IPackageDataObserver接口的类,所以导致clear函数根本没有起作用。如果没有效果,

clearUserdata.invoke(am, "com.android.launcher", new PackageDataClearObserver());
将第二个参数改成“com.android.launcher2”试试。如果要重置第三方桌面,将这个值改成三方桌面的包名即可。当然该方法也可以重置任意一个应用程序的用户数据。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值