当前位置: 首页 > 知识库问答 >
问题:

访问外部存储权限问题android

林彬
2023-03-14

我试图找到所有的mp3文件在存储,但我的应用程序崩溃,我使用logcat看看为什么和问题的权限访问外部存储,但我已经把权限在清单,我不知道为什么不断崩溃。第一个错误:

03-06 14:55:24.553:E/dex2OAT(2796):创建oat文件失败:/data/dalvik-cache/x86/data@app@felipe.cursoandroid.com.musicbox-2@split_lib_dependencies_apk.apk@classes.dex:拒绝权限

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SongsManager songsManager = new SongsManager();
    songsManager.getSongs(this);
    ArrayList<Song> songList = songsManager.getSongsList();
    ArrayAdapter<Song> adapterSongList = new ArrayAdapter<Song>(this, android.R.layout.simple_list_item_1, songList);
    ListView listView = (ListView) findViewById(R.id.musicList);
    listView.setAdapter(adapterSongList);
}
}
public class SongsManager {

private ArrayList<Song> songsList;
public ArrayList<Song> getSongsList(){
    return songsList;
}
public void getSongs(Context ctx){
    ContentResolver musicResolver = ctx.getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);
        int pathConlumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DATA);
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);
            String thisPath = musicCursor.getString(pathConlumn);
            songsList.add(new Song(thisId, thisTitle, thisArtist, thisPath));
        }
        while (musicCursor.moveToNext());
    }
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="felipe.cursoandroid.com.musicbox">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>

共有1个答案

仲孙文乐
2023-03-14

你用的是哪个Android版本?请注意,对于6+,您应该询问运行时的权限

 类似资料:
  • 我正试图实现一些清理工具。越来越多的制造商出于某种“安全原因”禁止根设备,禁止不请求解锁。 在API28之后,这段代码将出现错误: 但我相信将来会被杀的。 那么,有什么优雅的方法来管理SDCard吗?

  • 我正在创建一个FileManager应用程序,我正在创建复制和剪切功能,它在内部设备存储中运行良好,但当我尝试在外部存储中复制某些内容时,它会说权限被拒绝。我拥有所有授予的写入权限。 如何在外部存储器中写入?

  • 我的应用程序的目标SdkVersion=29 我拍了一张照片,它保存在路径: src=/storage/simulated/0/DCIM/Camera/IMG_20201120_091943。jpg 然后我想使用FileInputStream/FileOutputStream将此图像复制到内部存储。虽然,我的应用程序有WRITE/READ存储权限,但当我编码 我收到了一个FileNotFoundE

  • 有没有人遇到过这样的情况:当我对一个用户使用管理策略时,它可以工作,但当我使用内联策略时,它说访问被拒绝。我为IAM用户授予了对bucket读取访问权限,即它只能访问bucket。 我也试过这个

  • 本文向大家介绍MySQL存储过程的权限问题小结,包括了MySQL存储过程的权限问题小结的使用技巧和注意事项,需要的朋友参考一下 MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。 本来是一个很正常的操作,但在我来看是比较着急且紧迫的,说来惭愧,忙着方向规划和开发的事情,这个基础的操作功能竟然给忽略了,所以看到目前的一些实现方式,还是希望