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

로그 캣 :

> 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

세계 읽을 수있는 파일은 보안 결함 수 없다 . 그래서 안드로이드는 먼저 그것을 비난하고 그것을 완전히 제거했습니다. MODE_WORLD_READABLEAndroid M까지 버전에서 더 이상 사용되지 않습니다. 그러나 Android N에서는 더 이상 지원되지 않으며 SecurityException을 던졌습니다. 그래서 다른 모드를 시도하십시오. 나는 Context.MODE_PRIVATE을 사용했고 효과가있었습니다.

+0

** getDefaultSharedPreferences **에도 적용 할 수 있습니까? –

+0

메소드가 context.getSharedPreferences (PREF_NAME, MODE)인데 getDefaultSharedPreferences()가 없습니다. getSharedPreferences() 당신이 무엇을 요구하는 경우 대답은 예, 그래서 우리는 환경 설정 이름과 질문 (질문에 질문했다) 때문입니다. –

+0

@ R.Y 그는 ['PreferenceManager.getDefaultSharedPreferences (Context context)'] (https://developer.android.com/reference/android/preference/PreferenceManager.html#getDefaultSharedPreferences (android.content.Context))를 참조하고 있습니다. – Sufian

관련 문제