引起:java.lang.SecurityException:用户10110和当前进程都没有android.permission.CLEAR_APP_CACHE

时间:2018-06-07 07:23:30

标签: java android file caching file-management

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



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

    }//End of onRemoveCompleted() method
}

我正在使用以下权限

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

以上代码适用于设备&lt; Marsh Mellow但是当我运行此代码时 Marshmellow设备导致异常。我读过许多帖子,说CLEAR_APP_CACHE权限是系统保留而不是第三方。那么Clean master和其他应用程序如何清除android中其他应用程序的内部缓存。请帮我解决异常,以便我可以逐步清除第三方应用程序的缓存。 在此先感谢。

1 个答案:

答案 0 :(得分:0)

从Android 6.0开始,CLEAR_APP_CACHE的权限级别为signature|privileged。普通的Android应用无法拥有此权限。仅当您的应用程序使用固件的签名密钥签名或者您已安装在特权系统分区上时,才会授予此权限。

在Android 6.0之前,CLEAR_APP_CACHE的保护级别很危险,因此普通应用可以在清单中请求它。