无法从SD卡读取。 android.permission.READ_EXTERNAL_STORAGE无效

时间:2016-07-06 13:39:27

标签: android permissions adb android-sdcard

我道歉,因为我知道这个问题已被问过几百次,但我似乎还无法让它发挥作用。我会尝试尽可能具体,所以我不会重复旧线程。

我的目标:

我试图编写一个通过SDCARD播放MP3文件的Android应用。我希望用户能够通过PC / MAC将MP3直接复制到SD卡。是的,我知道已经有数百个应用程序已经这样做了。

我的代码:

以下代码段是我扫描目录中寻找MP3的地方。这就是我所有的错误似乎来自的地方。

    File dir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_MUSIC );
    if ( dir == null ) {
        Log.w(TAG,"Directory null ");
        return all;
    }

    if ( ! dir.exists() ) {
        Log.w(TAG,"Creating Data Directory: " + dir.getAbsolutePath() + " = " + dir.mkdirs() );
    }

    File[] children = dir.listFiles();
    if ( children == null ) {
        Log.w(TAG,"listFiles() return null : " + dir.getAbsolutePath() );
        return all;
    } else {
        Log.w(TAG,"listFiles() returned  : " + children.length );
    }

这是我的清单......

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.aloisi.fuegomp3">

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

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

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

结果: 当我在模拟器中运行上面的代码时,它工作正常。我能够扫描目录并播放音乐。我已尝试使用两种模拟SD卡。

当我在设备上运行上述代码时,我获得了某些版本的权限被拒绝。根据我设置文件目录的方式,我将获得以下任何结果:

  1. dir.exists()= false但dir.mkdirs()失败
  2. dir.listFiles()返回null或new File [0];
  3. 我尝试过的事情:

    1. android.permission.WRITE_EXTERNAL_STORAGE或android.permission.READ_EXTERNAL_STORAGE的每个排列。这似乎对结果没有影响。
    2. 在Kindle Fire(Lollipop)和Galaxy S5(Marshmallow)上测试
    3. 使用各种版本的Environment.getExternalStoragePublicDirectory()或Context.getExternalFiles();
    4. 我的问题:

      在KitKat中,看起来他们重新构建了SD权限。这甚至还支持吗?我看到环境和上下文返回目录的情况实际上是内部存储而不是外部存储。

      我的SD卡是否可以使用支持权限的其他文件系统类型进行格式化?即使我的应用程序创建了一个标准/ Android / data / package / files /目录,并且我将文件复制到该目录中,那么应用程序仍然不会提交文件。

      我不确定我的应用是否是受信任的&#34;应用程序。这可能是我的问题吗?我已经看到一些对不受信任的应用获得不同权限的引用。如果是这样,在开发应用程序时如何让我的应用程序受信任?

0 个答案:

没有答案