[英]Android Marshmallow Runtime Permissions not working properly
I am trying to implement runtime permissions for android in my app. 我正在尝试在我的应用程序中实现android的运行时权限。 However, Android Studio doesn't appear to be indexing properly.
但是,Android Studio似乎无法正确建立索引。 The code below is from Google's example.
下面的代码来自Google的示例。
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Taylor on 3/14/16.
*/
public class TCMediaPicker extends AppCompatActivity {
@Override public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Cursor cursor;
setContentView(R.layout.mediapicker);
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION
};
cursor = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
null,
null);
List<String> songs = new ArrayList<String>();
if (cursor!=null)
while(cursor.moveToNext()) {
songs.add(cursor.getString(0) + "||"
+ cursor.getString(1) + "||"
+ cursor.getString(2) + "||"
+ cursor.getString(3) + "||"
+ cursor.getString(4) + "||"
+ cursor.getString(5));
}
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
}
It shows cannot resolve symbol checkSelfPermission and unknown class PackageManager.PERMISSION_GRANTED and cannot resolve symbol READ_CONTACTS. 它显示无法解析符号checkSelfPermission和未知类PackageManager.PERMISSION_GRANTED,并且无法解析符号READ_CONTACTS。
Here is the build.gradle: 这是build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "xxx.xyz.php_request"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'lib', include: ['*.jar'])
compile "com.google.android.gms:play-services:8.3.0"
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
}
Make sure that you also specify all permissions in AndroidManifest. 确保您还指定了AndroidManifest中的所有权限。 Don't forget to import
别忘了导入
import android.content.pm.PackageManager;
in your Activity. 在您的活动中。
First, your permission check is not inside a function block. 首先,您的权限检查不在功能块内。 If fixing that works, great!
如果修复成功,那就太好了! If not, can you check if replacing
AppCompatActivity
with the good old Activity
does the trick? 如果不是,您能否检查是否用良好的旧
Activity
替换AppCompatActivity
可以解决问题? I recently did something very similar, and based on a cursory glance, you seem to have done things correctly. 我最近做了一些非常相似的事情,并且基于粗略的浏览,您似乎已经正确地完成了工作。
Use 采用
android.Manifest.permission.READ_CONTACTS
instead of 代替
Manifest.permission.READ_CONTACTS
OR Use Below code 或使用以下代码
getPermissionToReadContacts();
private static final int READ_CONTACTS_PERMISSIONS_REQUEST = 1;
public void getPermissionToReadContacts() {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{ android.Manifest.permission.READ_CONTACTS},READ_CONTACTS_PERMISSIONS_REQUEST);
}
}
// Callback with the request from calling requestPermissions()
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String permissions[],
@NonNull int[] grantResults) {
// Make sure it's our original READ_CONTACTS request
if (requestCode == READ_CONTACTS_PERMISSIONS_REQUEST) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
functionToGetContacts(); //change it to your function
} else {
//Read Contacts permission denied
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.