12

Исключение происходит только в устройствах 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) 
+0

посмотреть в документации, MODE_WORLD_READABLE устарел, потому что это слишком опасно. Https://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE – Opiatefuchs

+4

Как указывает ошибка, 'MODE_WORLD_READABLE' является не поддерживается. Удалите этот флаг из вызова 'getSharedPreferences()', заменив его на 'MODE_PRIVATE' или' 0'. – CommonsWare

+0

В моем приложении огромное требование «MODE_WORLD_READABLE». И он работает нормально до 6.0, но не работает с 7.0 –

ответ

21

World считываемые файлы не могут быть недостаток безопасности , Поэтому андроид сначала отказался от этого, а затем полностью удалил его. MODE_WORLD_READABLE устарел в версиях до Android M. Но в Android N он больше не поддерживается и бросает SecurityException. Поэтому попробуйте другой режим. Я использовал Context.MODE_PRIVATE, и он сработал.

+0

Это также применимо к ** getDefaultSharedPreferences **? –

+0

метод context.getSharedPreferences (PREF_NAME, MODE), я не нахожу getDefaultSharedPreferences(). Если это getSharedPreferences(), о чем вы просите, тогда ответ будет да, потому что мы предпочитаем имя и MODE (что задавалось в вопросе). –

+0

@ R.Y он имеет в виду ['PreferenceManager.getDefaultSharedPreferences (контекст контекста)'] (https://developer.android.com/reference/android/preference/PreferenceManager.html#getDefaultSharedPreferences (android.content.Context)). – Sufian

 Смежные вопросы

  • Нет связанных вопросов^_^