Android Studio 无法识别运行时权限代码



我正在尝试实现运行时权限(针对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

最新更新