2016-05-23 10 views
0

Androidの場合、そのlistOfFilesはnullなので、どうしたのですか? getPathをgetAboletePathに変更しようとしましたが、まったく同じです。 そして、私は/ storage /にアクセスしようとしましたが(SD_PATHは/ storage/emulated/0です)、私は2つのフォルダのリストを持っています:エミュレートされていて、自己です。これと同じことは、過去に私を燃やしたなぜlistOfFilesがnullですか?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.unimusic"> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

どのバージョンのAPIをターゲットにしていますか? – curob

+0

minSdkが15、target sdkが23 –

+0

の場合、ターゲットSDKを22に変更してみてください。それがうまくいく場合は、理由とその修正方法を記した回答を記入します。 – curob

答えて

2

public class MainActivity extends AppCompatActivity { 

    private static final String SD_PATH = Environment.getExternalStorageDirectory().getPath(); 

    ... 

File home = new File(SD_PATH); 
     File[] listOfFiles = home.listFiles(); 
     if(listOfFiles != null && listOfFiles.length > 0){ 
      for (File file : home.listFiles()){ 
       songs.add(file.getName()); 
      } 
     } 

は、ここに私のAndroidManifest.xmlです。アプリが実行されている間

は、Android 6.0(APIレベル23)で始まりドキュメント

を引用するには、ユーザーがアプリをインストールしていないとき、アプリケーションへのアクセス権を付与します。

hereを参照してください)ファイルシステムからの読み取り

は今使用するためには、実行時に要求しなければならない権限の一つです。これは、SDK 23以降をターゲットにしている場合にのみ問題になります。どのように修正する:

ドキュメントは、私はあなたのユースケース(私はこのコードを実行していないが、それは良い出発点でなければならない)のために変更した例(元はhere参照)を示しています。許可が必要なアクティビティ(MainActivity)については、onCreate()のアクセス許可を要求することをお勧めします。

// Ask for the read external storage permission 
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
{ 
    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.READ_EXTERNAL_STORAGE)) 
    { 
     // Provide an additional rationale to the user if the permission was not granted 
     // and the user would benefit from additional context for the use of the permission. 
     // Display a SnackBar with a button to request the missing permission. 
     Snackbar.make(layout, 
        "External storage is needed in order to {YOUR EXPLANATION HERE}", 
        Snackbar.LENGTH_INDEFINITE).setAction("OK", new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View view) 
       { 
        // Request the permission 
        ActivityCompat.requestPermissions(MainActivity.this, 
          new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0); 
       } 
      }).show(); 
     } 
     else 
     { 
      // No explanation needed, we can request the permission. 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0); 
     } 
} 
+0

これはうまくいきましたが、requestPermissionsで新しいエラーが発生しました。アプリケーションがちょうどエラーでクラッシュするパッケージインストーラプログラムがクラッシュしました(このようなsmth、いくつかの翻訳エラーがあります、なぜならロシア語を使用しています) –

+0

ok、sry、my fault。私は許可を求めているのであれば、AndroidManifest.xmlにあらかじめ追加する必要はないと思いました:D –

関連する問題