如何重置桌面

来源:互联网 发布:应用商城软件下载 编辑:程序博客网 时间:2024/06/02 06:33

在软件开发过程中,有时候会碰到需要重置桌面的情况。类似的效果为清空桌面程序的用户数据,这样系统会从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 blocke.printStackTrace();}} classPackageDataClearObserver implements IPackageDataObserver{ @OverridepublicIBinder asBinder() {//TODO Auto-generated method stubreturnnull;} @Overridepublicvoid onRemoveCompleted(String arg0, boolean arg1)throwsRemoteException {//TODO Auto-generated method stub}}

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

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