2017-03-31 80 views
0

首先抱歉我的英語不好。如何獲取讀取外部存儲權限?

林開發Android MP3播放器應用程序,我得到有關用戶權限(READ_EXTERNAL_STORAGE)

一個錯誤,這是我的代碼,在那裏我問permisions:

int permissionCheck = ContextCompat.checkSelfPermission(PlayListActivity.this, 
       Manifest.permission.READ_EXTERNAL_STORAGE); 

     if (ContextCompat.checkSelfPermission(PlayListActivity.this, 
       Manifest.permission.READ_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) { 


      // OPCIONAL(explicaciones de poque pedimos los permisos) 
      if (ActivityCompat.shouldShowRequestPermissionRationale(PlayListActivity.this, 
        Manifest.permission.READ_EXTERNAL_STORAGE)) { 

      } else { 
       //pedir permisos 
       ActivityCompat.requestPermissions(PlayListActivity.this, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
         permissionCheck); 

這是代碼的其餘部分:

ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>(); 

    SongsManager plm = new SongsManager(PlayListActivity.this); 
    // get all songs from sdcard 
    this.songsList = plm.getPlayList(); 

    // looping through playlist 
    for (int i = 0; i < songsList.size(); i++) { 
     // creating new HashMap 
     HashMap<String, String> song = songsList.get(i); 

     // adding HashList to ArrayList 
     songsListData.add(song); 
    } 

    // se añaden las canciones a la ListView mediante un adapter utilizando el layout playlist_item 
    ListAdapter adapter = new SimpleAdapter(this, songsListData, 
      R.layout.playlist_item, new String[] { "songTitle" }, new int[] { 
      R.id.songTitle }); 

    setListAdapter(adapter); 

這是錯誤:

03-31 22:09:16.159 2258-2258/com.androidchatapp E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.androidchatapp, PID: 2258 
                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidchatapp/com.androidchatapp.PlayListActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2258, uid=10184 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                    at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347) 
                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5451) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                   Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2258, uid=10184 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
                    at android.os.Parcel.readException(Parcel.java:1620) 
                    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 
                    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
                    at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 
                    at android.content.ContentResolver.query(ContentResolver.java:493) 
                    at android.content.ContentResolver.query(ContentResolver.java:435) 
                    at com.androidchatapp.SongsManager.getPlayList(SongsManager.java:48) 
                    at com.androidchatapp.PlayListActivity.onCreate(PlayListActivity.java:65) 
                    at android.app.Activity.performCreate(Activity.java:6323) 
                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  
                    at android.app.ActivityThread.access$900(ActivityThread.java:153)  
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)  
                    at android.os.Handler.dispatchMessage(Handler.java:102)  
                    at android.os.Looper.loop(Looper.java:148)  
                    at android.app.ActivityThread.main(ActivityThread.java:5451)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

感謝you¡

+0

你有沒有加入日e清單文件中的權限? <使用權限android:name =「android.permission.READ_EXTERNAL_STORAGE」/> – Edu

回答

0

您已要求從代碼的許可,但你可能忘了在清單文件中添加此許可標記,

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

我忘了提,我已經有了,但謝謝你的幫助。 –

1

的Android從棉花糖OS推出運行權限,這樣我們需要使用Manifest權限實現運行時權限。如果CompileSdkVersion = 23

你可以在你的屏幕上打開(在的onCreate())的按鈕或點擊事件(像音樂 - 播放)

使用這種方法進行檢查運行權限是使請求允許或不

public boolean checkPermissionForReadExtertalStorage() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      int result = context.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE); 
      return result == PackageManager.PERMISSION_GRANTED; 
     } 
     return false; 
    } 

如果它返回false,然後調用下面的方法,它會顯示權限的對話框

public void requestPermissionForReadExtertalStorage() throws Exception { 
     try { 
      ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        READ_STORAGE_PERMISSION_REQUEST_CODE); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      throw e; 
     } 
    }