2

Android 2.2를 실행하는 여러 사용자로부터 다음 오류 보고서를 받았습니다. 나는 그것을 국부적으로 재현 할 수 없다.MediaController가 java.lang.SecurityException : Permission Denial을 야기 함

java.lang.SecurityException: Permission Denial: writing com.android.providers.settings.SettingsProvider uri content://settings/system from pid=15121, uid=10063 requires android.permission.WRITE_SETTINGS 
    at android.os.Parcel.readException(Parcel.java:1247) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
    at android.content.ContentProviderProxy.insert(ContentProviderNative.java:408) 
    at android.content.ContentResolver.insert(ContentResolver.java:587) 
    at android.provider.Settings$NameValueTable.putString(Settings.java:556) 
    at android.provider.Settings$System.putString(Settings.java:753) 
    at android.provider.Settings$System.putInt(Settings.java:836) 
    at android.widget.MediaController.dolbySwitch(MediaController.java:835) 
    at android.widget.MediaController.access$1100(MediaController.java:89) 
    at android.widget.MediaController$6.onClick(MediaController.java:763) 
    at android.view.View.performClick(View.java:2408) 
    at android.view.View$PerformClick.run(View.java:8816) 
    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:4669) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 
    at dalvik.system.NativeStart.main(Native Method) 

내 코드는 설정을 변경하면 안됩니다. MediaController로 간단한 VideoView를 만들고 URI를로드해야합니다.

오류는 극히 드문 것으로 보이므로 큰 문제는 아니지만 그 원인을 이해하지 못합니다.

편집 : 요청에 의해, 여기에 VideoView를 지켜 보면서 &를 MediaController의 코드입니다 :

private void videoViewInit() 
    { 
     videoView = (VideoView)findViewById(R.id.videoView); 
     MediaController mediaController = new MediaController(this); 
     mediaController.setAnchorView(videoView); 
     mediaController.setMediaPlayer(videoView); 
     videoView.setMediaController(mediaController); 
     videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
      @Override 
      public boolean onError(MediaPlayer mp, int errorType, int extra) { 
        return false; 
      }}); 
     videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){ 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
        videoView.requestFocus(); 
      }}); 
     videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
      }}); 
    } 

    protected void videoViewDisable() { 
     videoView.stopPlayback(); 
    } 

    private void videoViewLoad(Uri uri) { 
     if(uri == null || uri.toString().equals("")) 
      return; 

     if(videoView == null) 
       videoViewInit(); 

     videoView.setVideoURI(uri); 
     videoView.start(); 
    } 
+1

내 코드 설정을 변경하려고 시도해서는 안 ** * * 스택 추적 코드가 다르기 때문에 코드를 표시하십시오. – Blundell

+0

코드를 추가하기 위해 질문을 편집했습니다. 시스템 설정을 변경하려면 특정 설정 클래스를 사용해야한다고 생각했을 것입니다. –

+0

이 모양은 ZTE V9 장치에서만 발생합니다. 그들은 이상한 사용자 정의 코드를 추가해야합니다. –

답변

3

파일을 명시하기 위해이 권한을 추가하기

< uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> 
+0

감사합니다. 가능한 경우 추가 권한없이 수행하기를 원하지만 실제로 시스템 설정을 모르기 때문에 변경하고 싶다. 누군가가 요청하면 허가 이유를 설명하기가 어려울 것입니다. –