12

Wyjątek występuje tylko w urządzeniach Nougat (emulator) systemu Android 7.0.java.lang.SecurityException: MODE_WORLD_READABLE nie jest już obsługiwany

java.lang.SecurityException: MODE_WORLD_READABLE nie jest już obsługiwana

Mój kod:

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

spojrzenie w dokumentacji MODE_WORLD_READABLE jest przestarzała, ponieważ its zbyt niebezpieczne .: https://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE – Opiatefuchs

+4

Ponieważ błąd wskazuje, jest 'MODE_WORLD_READABLE' Nieobsługiwany. Usuń tę flagę z wywołania 'getSharedPreferences()', zastępując ją 'MODE_PRIVATE' lub' 0'. – CommonsWare

+0

Istnieje ogromne zapotrzebowanie na "MODE_WORLD_READABLE" w mojej aplikacji. I działa dobrze do 6.0, ale nie działa z 7.0 –

Odpowiedz

21

Światowej czytelny pliki mogą być wada bezpieczeństwa . Android najpierw go wycofał, a następnie całkowicie go usunął. MODE_WORLD_READABLE został wycofany w wersjach do Android M. Ale w Android N nie jest już obsługiwany i wyrzuca SecurityException. Więc spróbuj innego trybu. Użyłem Context.MODE_PRIVATE i zadziałało.

+0

Czy ma to również zastosowanie do ** getDefaultSharedPreferences **? –

+0

metoda to context.getSharedPreferences (PREF_NAME, MODE), nie znajduję metody getDefaultSharedPreferences(). Jeśli jest to getSharedPreferences() to, o co prosisz, to odpowiedź brzmi "tak", ponieważ preferujemy nazwę i TRYB (który został zadany w pytaniu). –

+0

@ R.Y on odnosi się do ['PreferenceManager.getDefaultSharedPreferences (kontekst kontekstu)'] (https://developer.android.com/reference/android/preference/PreferenceManager.html#getDefaultSharedPreferences (android.content.Context)). – Sufian

Powiązane problemy