2016-04-28 47 views
2

我想开发一个可以擦除其他应用程序缓存数据的Android应用程序。我试图浏览所有的博客,但没有一个为我工作。我可以通过下面的代码
如何从另一个在棉花糖的Android应用程序清除其他应用程序缓存?

参考清除我的应用程序的缓存:
How to delete other applications cache from our android app?

private static final long CACHE_APP = Long.MAX_VALUE; 
private CachePackageDataObserver mClearCacheObserver; 

btnCache.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      clearCache(); 
     } 
    });//End of btnCache Anonymous class 

void clearCache() 
{ 
    if (mClearCacheObserver == null) 
    { 
     mClearCacheObserver=new CachePackageDataObserver(); 
    } 

    PackageManager mPM=getPackageManager(); 

    @SuppressWarnings("rawtypes") 
    final Class[] classes= { Long.TYPE, IPackageDataObserver.class }; 

    Long localLong=Long.valueOf(CACHE_APP); 

    try 
    { 
     Method localMethod= 
      mPM.getClass().getMethod("freeStorageAndNotify", classes); 

     /* 
     * Start of inner try-catch block 
     */ 
     try 
     { 
     localMethod.invoke(mPM, localLong, mClearCacheObserver); 
     } 
     catch (IllegalArgumentException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     catch (IllegalAccessException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     catch (InvocationTargetException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     /* 
     * End of inner try-catch block 
     */ 
    } 
    catch (NoSuchMethodException e1) 
    { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
}//End of clearCache() method 

private class CachePackageDataObserver extends IPackageDataObserver.Stub 
{ 
    public void onRemoveCompleted(String packageName, boolean succeeded) 
    { 

    }//End of onRemoveCompleted() method 
}//End of CachePackageDataObserver instance inner class 


而且也在你的src文件夹中创建一个包名为android.content.pm该包内创建一个名为IPackageDataObserver .aidl的文件并粘贴以下代码

package android.content.pm; 

/** 
* API for package data change related callbacks from the Package Manager. 
* Some usage scenarios include deletion of cache directory, generate 
* statistics related to code, data, cache usage(TODO) 
* {@hide} 
*/ 
oneway interface IPackageDataObserver { 
    void onRemoveCompleted(in String packageName, boolean succeeded); 
} 


和您的清单一定要使用下面的代码

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/> 

以上成功清理棒棒糖但是当这种代码在执行Marshamallow,那么它是不是清除所有数据代码。为什么这样做??????????????

任何建议将被接受。或另一种解决方法。谢谢。

+0

我有同样的问题。如果您发现任何解决方案,请与我分享 –

回答

0

因为这是一种非官方的方式,Google现在已将方法的签名级别提升为signature @ system @ Marshamallow。

相关问题