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);
}
}
}
那么
您还可以使用下面的插件轻松添加运行时权限,无需付出更多努力,
为什么要在最后检查权限?在显示权限对话框之前。允许活动完成工作(在屏幕上加载视图)。这就是为什么。哦,好的,回答得很好!为什么我们最后要检查权限?在显示权限对话框之前。允许活动完成工作(在屏幕上加载视图)。这就是为什么。哦,好的,回答得很好!