2017-05-04 140 views
0

我正在製作一個加載OBJ和MTL文件的應用程序,然後將它顯示在屏幕上供用戶旋轉。我正在運行Android 6.0.1的手機上進行測試。 OBJ和MTL文件位於手機上名爲「模型」的目錄中。要選擇應用程序中的文件,我需要打開一個菜單並點擊'打開'。但沒有READ_EXTERNAL_STORAGE權限,該應用程序會崩潰。我在AndroidManifest.xml中添加了權限並再次測試了該應用。這一次,我可以點擊'打開'並查看列表視圖中的所有文件應該是,除非我看不到任何文件。點擊'打開'後,該應用程序也不會崩潰。 logcat沒有顯示任何錯誤。Android READ_EXTERNAL_STORAGE權限是否正常工作?

當尋找答案,我的問題,我碰到這樣的:

if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (shouldShowRequestPermissionRationale(
      Manifest.permission.READ_EXTERNAL_STORAGE)) { 
     // Explain to the user why we need to read the contacts 
    } 

    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
      MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 

    // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an 
    // app-defined int constant that should be quite unique 

    return; 
} 

Sniplet來源:https://developer.android.com/training/permissions/requesting.html#perm-check

是否需要審批權限爲它實際讀取外部存儲和顯示應用程序中的文件?這是我需要添加到我的代碼? 即使在尋找答案之後,我似乎也無法解決這個看起來很簡單的'錯誤'。從Settings-> App- > [you app name]

2)

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="[REDACTED]" 
    android:versionCode="1" 
    android:versionName="16150.8"> 

    <uses-sdk android:minSdkVersion="7" 
       android:targetSdkVersion="23"/> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" 
        android:maxSdkVersion="23" /> 


    <application 
     [REDACTED] 
    </application> 

</manifest> 
+0

'要在應用程序中選擇一個文件,我需要打開一個菜單,然後單擊 '打開'。但沒有READ_EXTERNAL_STORAGE權限,該應用程序會崩潰。如果它是您的應用程序,那麼請告訴我們,如果用戶點擊打開,您會做什麼。我們怎麼知道?如果你發現異常/錯誤,應用程序不必崩潰。 – greenapps

+0

'是否需要批准其實際讀取外部存儲器a'的權限?請求您的應用的用戶授予權限。所以用戶應該點擊Yes。你看到對話框來了嗎? – greenapps

+0

當用戶點擊打開時,我們仍然看不到您執行的代碼。所以我們不知道會發生什麼。在Android 6及以上版本中,您確實需要添加代碼,以允許用戶在清單中授予您請求的權限。 – greenapps

回答

0

覈查請求權限的API比你需要添加運行時允許23更大。

1)檢查的最低SDK版本應大於15

2)最大SDK版本應大於23或23

3)您需要每個調用運行時允許更大訪問外部存儲或其他任何東西的時間。

4)請參閱本網站的運行許可 http://www.truiton.com/2016/04/obtaining-runtime-permissions-android-marshmallow-6-0/

https://www.sitepoint.com/requesting-runtime-permissions-in-android-m-and-n/

http://www.journaldev.com/10409/android-handling-runtime-permissions-example

+0

謝謝你的回答。這對我的問題幫助很大。如果我有足夠的聲譽,我會upvote你的答案。再次感謝您的幫助! – Vleuten

0

1)刪除你數據從允許行中刪除android:maxSdkVersion

3)代碼

if (Build.VERSION.SDK_INT >= Build.Build.VERSION_CODES.M) { 
    checkPermissions(Utils.PERMISSION_WRITE_EXTERNAL_STORAGE); 
}else{/*open regulary*/} 
相關問題