android - 如何在运行时在 Android Marshmallow 中获取 CLEAR_APP_CACHE 权限?

标签 android android-6.0-marshmallow android-permissions

代码:

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);

        localMethod.setAccessible(true);
        // 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.getCause().printStackTrace();
        }

        // End of inner try-catch block

    } catch (NoSuchMethodException e1) {

        e1.printStackTrace();
    }

}

逻辑猫:

java.lang.SecurityException: Neither user 10206 nor current process has android.permission.CLEAR_APP_CACHE.
     at android.os.Parcel.readException(Parcel.java:1620)
     at android.os.Parcel.readException(Parcel.java:1573)
     at android.content.pm.IPackageManager$Stub$Proxy.freeStorageAndNotify(IPackageManager.java:5081)
     at android.app.ApplicationPackageManager.freeStorageAndNotify(ApplicationPackageManager.java:2500)
     at android.content.pm.PackageManager.freeStorageAndNotify(PackageManager.java:4710)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.onexsoftech.clearcacheapp.MainActivity.clearCache(MainActivity.java:278)
     at com.onexsoftech.clearcacheapp.MainActivity.insertDummyContactWrapper1(MainActivity.java:495)
     at com.onexsoftech.clearcacheapp.MainActivity.insertDummyContact(MainActivity.java:472)

最佳答案

Android 6.0 之前,CLEAR_APP_CACHE had a protectionLevel of dangerous ,所以普通的 SDK 应用程序可以在 list 中请求它。

从 Android 6.0 开始,CLEAR_APP_CACHE has a protectionLevel of signature|privileged .普通的安卓应用无法持有该权限。只有当您的应用程序使用固件的签名 key 签名或您安装在特权系统分区上时,您才能拥有此权限。

关于android - 如何在运行时在 Android Marshmallow 中获取 CLEAR_APP_CACHE 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40261139/

相关文章:

Android 权限 - Manifest 或 android.manifest

java - 错误ArrayIndexOutOfBoundsException仅有时发生,用户权限?

android Activity 保护免受 Intent

android - RecyclerView 中的 CardView 没有间隙和 textview 超出布局

android - 在 Android 中使用字符串声明 URL 时出现 malformedURLException

android - 在 Xamarin Android 中打开文件

javascript - 从 Android WebView 获取 iframe 数据

Android通知小图标背景一直是黑色

安卓6.0 : Get package name of current activity

android - 无需 ACCESS_NETWORK_STATE 权限即可查看是否有互联网连接