我正在尝试实现运行时权限(针对SDK 24),但Android Studio似乎无法识别所有代码。
一切都很好,直到我到达"。READ_CONTACTS"或".相机。此外,"requestPermissions."也变为红色。我尝试导入各种东西,例如"android.support.v4.content.ContextCompat",但无济于事。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED){
yeahReadContacts();
}else{
requestPermissions. //This and "READ_CONTACTS" are red.
}}
另外,我从自定义对话框类调用它,但我认为这应该不是问题,因为这些应该是"运行时"权限,对吧?
运行时权限代码变为红色的示例
在@Enzokie的帮助下,我想出了这两个问题。
这。READ_CONTACTS Manifest.permission.READ_CONTACTS的一部分,因为我以某种方式创建了一个名为 Manifest.java 的文件,并且需要将其重命名为 ManifestNot.java 之类的名称,因为它与清单库功能冲突。
其次,库函数 requestPermissions 是红色的,因为我是从对话框调用它的,并且需要用 mActivity 作为前缀,这是我在对话框的构造函数方法中创建和初始化的 Activity 对象:
Activity mActivity; //Declared
//The constructor
public AddEntityDialog(Context context) {
super(context);
mActivity = (Activity) context;
}
当然,我需要定义 requestPermissions 需要的几个参数,如下所示,但后来我能够编写代码而不会变红。
String[] perms = {"android.permission.READ_CONTACTS"};
int permsRequestCode = 100; //This can be any number
然后最后一行不再是红色:
mActivity.requestPermissions(perms, permsRequestCode);
以下是一段很好的代码,以获得更好的上下文:
public void readContacts(){
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED){
yeahReadContacts();
}else{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
mActivity.requestPermissions(perms, permsRequestCode);
}
}
}
而不是尝试这个例子。它非常适合我..
https://learnpainless.com/android/marshmallows/runtime-permission-example-good-practice-real-example
我遇到了同样的错误。这就是它是如何解决的:
只需更改:
Manifest.permission.READ_CONTACTS
自
amdroid.Manifest.permission.READ_CONTACTS