Android:函数未在Android中使用运行时权限执行

Android:函数未在Android中使用运行时权限执行,android,runtime,android-permissions,Android,Runtime,Android Permissions,在下面的代码中,getInfoFromDevice没有被执行,我也尝试了Log.d(),但它不能提供进一步的帮助 在代码中,我使用运行时权限检查用户是否已授予访问外部存储的权限,如果是,则调用函数getInfoFromDevice()。我不确定函数的位置是否正确?但是这个函数没有执行。原因可能是什么 它不会抛出任何错误 public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissions

在下面的代码中,
getInfoFromDevice
没有被执行,我也尝试了
Log.d()
,但它不能提供进一步的帮助

在代码中,我使用运行时权限检查用户是否已授予访问外部存储的权限,如果是,则调用函数
getInfoFromDevice()
。我不确定函数的位置是否正确?但是这个函数没有执行。原因可能是什么

它不会抛出任何错误

public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback {

    ArrayList<String> listOfSongs = new ArrayList<String>();
    ListView liststructure;
    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
    String MUSIC_STRING = MediaStore.Audio.Media.IS_MUSIC + "!=0";
    String[] STAR = {"*"};
    String orderColumns = MediaStore.Audio.AudioColumns.TITLE + " COLLATE LOCALISED ASC";
   private final int REQUEST_GRANTED_BY_USER = 1;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkPermissions();
        liststructure = (ListView) findViewById(R.id.listView);


        SongsList list = new SongsList(MainActivity.this, listOfSongs);
        liststructure.setAdapter(list);

    }

    private void checkPermissions() {
        int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE);


        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {



            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_GRANTED_BY_USER);


        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {


        if(requestCode == REQUEST_GRANTED_BY_USER )
        {

        getInfoFromDevice();


        } else {
                    // Permission Denied
                    Toast.makeText(MainActivity.this, "EXTERNAL_STORAGE Denied", Toast.LENGTH_SHORT)
                            .show();
                }





    }

    void getInfoFromDevice() {
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Cursor cursor = getContentResolver().query(uri, STAR, MUSIC_STRING, null, null);

        if (cursor != null)

        {
            if (cursor.moveToFirst()) {
                do {
                    String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                    String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                    String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                    String albumID = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                    listOfSongs.add(album + " " + name + " " + albumID);

                } while (cursor.moveToNext());

            }
        }

    }


}
public类MainActivity扩展活动实现ActivityCompat.OnRequestPermissionsResultCallback{
ArrayList listOfSongs=新的ArrayList();
列表视图列表结构;
最终私有int请求\代码\请求\权限=123;
String MUSIC\u String=MediaStore.Audio.Media.IS\u MUSIC+“!=0”;
字符串[]星={“*”};
String orderColumns=MediaStore.Audio.AudioColumns.TITLE+“整理本地化ASC”;
用户授予的私有最终整数请求=1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
检查权限();
liststructure=(ListView)findViewById(R.id.ListView);
歌曲列表=新歌曲列表(MainActivity.this,歌曲列表);
setAdapter(列表);
}
私有void checkPermissions(){
int permissionCheck=ContextCompat.checkSelfPermission(MainActivity.this,
清单。权限。读取(外部存储);
if(permissionCheck!=PackageManager.PERMISSION\u已授予){
ActivityCompat.requestPermissions(MainActivity.this,
新字符串[]{Manifest.permission.READ\u EXTERNAL\u STORAGE},请求\u由\u用户授予);
}
}
@凌驾
public void onRequestPermissionsResult(int-requestCode、字符串[]权限、int[]grantResults){
if(requestCode==用户授予的请求)
{
getInfoFromDevice();
}否则{
//拒绝许可
Toast.makeText(MainActivity.this,“外部存储被拒绝”,Toast.LENGTH\u SHORT)
.show();
}
}
void getInfoFromDevice(){
Uri Uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
Cursor Cursor=getContentResolver().query(uri、星形、音乐字符串、null、null);
如果(光标!=null)
{
if(cursor.moveToFirst()){
做{
字符串名称=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_name));
字符串数据=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.data));
stringalbum=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.album));
String albumID=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
添加(唱片集+“”+姓名+“”+唱片集ID);
}while(cursor.moveToNext());
}
}
}
}
如果你需要更多的细节,请告诉我

编辑1


代码将在
MediaStore
库的帮助下查找mp3文件,并将检查它是否具有访问外部存储的权限,如果是,它将调用函数
getInfoFromDevice()

,只需按以下方式更改代码即可:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        liststructure = (ListView) findViewById(R.id.listView);
        SongsList list = new SongsList(MainActivity.this, listOfSongs);
        liststructure.setAdapter(list);

        checkPermissions();
    }

    private void checkPermissions() {
        if (Build.VERSION.SDK_INT >= 23) {
        int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE);
            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_GRANTED_BY_USER);
            }else{
                getInfoFromDevice();
            }
        }else{
            getInfoFromDevice();
        }
    }

只需更改代码,如下所示:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        liststructure = (ListView) findViewById(R.id.listView);
        SongsList list = new SongsList(MainActivity.this, listOfSongs);
        liststructure.setAdapter(list);

        checkPermissions();
    }

    private void checkPermissions() {
        if (Build.VERSION.SDK_INT >= 23) {
        int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE);
            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_GRANTED_BY_USER);
            }else{
                getInfoFromDevice();
            }
        }else{
            getInfoFromDevice();
        }
    }

首先检查权限,如下所示:

public void checkPermission(String permission) {
    if (ContextCompat.checkSelfPermission(BaseActivity.this,
            permission)
            != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(BaseActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {

            ActivityCompat.requestPermissions(BaseActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    10);

        } else {
            ActivityCompat.requestPermissions(BaseActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    10);

        }
    }
}
那么

您还可以使用下面的插件轻松添加运行时权限,无需付出更多努力,

首先检查以下权限

public void checkPermission(String permission) {
    if (ContextCompat.checkSelfPermission(BaseActivity.this,
            permission)
            != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(BaseActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {

            ActivityCompat.requestPermissions(BaseActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    10);

        } else {
            ActivityCompat.requestPermissions(BaseActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    10);

        }
    }
}
那么

您还可以使用下面的插件轻松添加运行时权限,无需付出更多努力,

为什么要在最后检查权限?在显示权限对话框之前。允许活动完成工作(在屏幕上加载视图)。这就是为什么。哦,好的,回答得很好!为什么我们最后要检查权限?在显示权限对话框之前。允许活动完成工作(在屏幕上加载视图)。这就是为什么。哦,好的,回答得很好!