不再支持java.lang.SecurityException:MODE_WORLD_READABLE
Android 7.0 Nougat(仿真器)设备中仅发生异常。不再支持java.lang.SecurityException:MODE_WORLD_READABLE
java.lang.SecurityException异常:MODE_WORLD_READABLE不再支持
我的代码:
public void SessionMaintainence(Context context) {
this.context = context;
preferences = context.getSharedPreferences(PREF_NAME, Context.MODE_WORLD_READABLE);
editor = preferences.edit();
editor.commit();
}
的logcat:
> E/AndroidRuntime: FATAL EXCEPTION: main
> Process: burpp.av.feedback, PID: 2796
> java.lang.RuntimeException: Unable to create application
> burpp.av.feedback.FeedbackApplication: java.lang.SecurityException:
> MODE_WORLD_READABLE no longer supported
> at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5364)
> at android.app.ActivityThread.-wrap2(ActivityThread.java)
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
> at android.os.Handler.dispatchMessage(Handler.java:102)
> at android.os.Looper.loop(Looper.java:154)
> at android.app.ActivityThread.main(ActivityThread.java:6077)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
> Caused by: java.lang.SecurityException: MODE_WORLD_READABLE no longer supported
> at android.app.ContextImpl.checkMode(ContextImpl.java:2162)
> at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:363)
> at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:358)
> at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:164)
> at burpp.av.feedback.support.SessionMaintainence.<init>(SessionMaintainence.java:63)
> at burpp.av.feedback.FeedbackApplication.onCreate(FeedbackApplication.java:43)
> at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
世界可读的文件可能是一个安全漏洞。所以android首先弃用它,然后完全删除它。 MODE_WORLD_READABLE
已弃用,版本为Android M
。但在Android N
不再支持,并抛出SecurityException
。所以尝试一种不同的模式。我用Context.MODE_PRIVATE
它工作。
这是否也适用于** getDefaultSharedPreferences **? –
该方法是context.getSharedPreferences(PREF_NAME,MODE),我没有找到getDefaultSharedPreferences()。如果它是getSharedPreferences()所要求的,那么答案是肯定的,因为我们的首选项名称和模式(在问题中被问到)。 –
@ R.Y他指的是['PreferenceManager.getDefaultSharedPreferences(Context context)'](https://developer.android.com/reference/android/preference/PreferenceManager.html#getDefaultSharedPreferences(android.content.Context))。 – Sufian
查看文档,MODE_WORLD_READABLE已弃用,因为它太危险了:https://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE – Opiatefuchs
由于错误提示'MODE_WORLD_READABLE'为不支持。从'getSharedPreferences()'调用中移除该标志,用'MODE_PRIVATE'或'0'替换它。 – CommonsWare
在我的应用程序中有'MODE_WORLD_READABLE'的巨大需求。它一直工作得很好,直到6.0,但它不工作7.0 –