Tôi đang phát triển một ứng dụng Cache-Cleaner, và khi tôi gọi một phương thức ẩn trong PackageManager tôi nhận được một SecurityException, mặc dù tôi đã cho ứng dụng của tôi những ứng dụng-phép "DELETE_CACHE_FILES"SecurityException trong Android khi gọi phản ánh phương pháp
Việc sử dụng-Quyền:
uses-permission android:name="android.permission.DELETE_CACHE_FILES"
uses-permission android:name="android.permission.CLEAR_APP_CACHE"
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"
uses-permission android:name="android.permission.GET_PACKAGE_SIZE"
phương pháp phản ánh:
Method method = getPackageManager().getClass().getMethod("deleteApplicationCacheFiles", String.class, IPackageDataObserver.class);
Các Lỗi:
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at <MY_PACKAGE_NAME>.MainActivity$1.onClick(MainActivity.java:70)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.SecurityException: Neither user 10037 nor current process has android.permission.DELETE_CACHE_FILES.
at android.os.Parcel.readException(Parcel.java:1322)
at android.os.Parcel.readException(Parcel.java:1276)
at android.content.pm.IPackageManager$Stub$Proxy.deleteApplicationCacheFiles(IPackageManager.java:2346)
at android.app.ContextImpl$ApplicationPackageManager.deleteApplicationCacheFiles(ContextImpl.java:2562)
... 14 more
Dòng 70:
method.invoke(getPackageManager(), app.packageName, dataObserver);
Nó nói rằng tôi không có sự cho phép, nhưng tôi đã decleared nó trong manifest của tôi ...
EDIT: tôi phát hiện ra này;
W/PackageManager(62): Not granting permission android.permission.DELETE_CACHE_FILES to package <MY_PACKAGE_NAME>.cachecleaner (protectionLevel=3 flags=0x8be46)
EDIT2: Tuyên bố của deleteApplicationCacheFiles (nhận nó qua method.toGenericString()):
public void android.app.ContextImpl$ApplicationPackageManager.deleteApplicationCacheFiles(java.lang.String, android.content.pm.IPackageDataObserver)
Có giải pháp nào cho vấn đề này không? Tôi tò mò –
@Mylleranton có u tìm thấy giải pháp nào không? – Erum
@ErumHannan Tôi nhớ đã tìm ra một giải pháp, nhưng đó là một vài năm trước. Tôi cũng nhớ viết một số ứng dụng thực hiện một nửa (trông khủng khiếp) nhưng phần làm sạch bộ nhớ cache ít nhất là làm việc và được thực hiện. Vì tôi không nhớ làm cách nào để khắc phục sự cố, tôi sẽ đính kèm toàn bộ dự án: https://www.dropbox.com/s/fjz221fbojm06uj/Utilities2.zip?dl=0 Hãy sử dụng mã mà bạn muốn . – MAA