2

我正在尝试实现运行时权限(针对 SDK 24),但 Android Studio 似乎无法识别所有代码。

一切都很好,直到我到达“.READ_CONTACTS”或“.CAMERA”。另外,“请求权限”。也会变红。我尝试导入各种东西,例如“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.
        }}

另外,我从自定义对话框类中调用它,但我认为这应该不是问题,因为这些应该是“运行时”权限,对吧?

运行时权限代码变红的示例

4

3 回答 3

1

在@Enzokie 的帮助下,我解决了这两个问题。

Manifest.permission.READ_CONTACTS 的 .READ_CONTACTS 部分,因为我以某种方式创建了一个名为 Manifest.java 的文件,并且需要将其重命名为 ManifestNot.java,因为它与 Manifest 库功能相冲突。

其次,库函数 requestPermissions 是红色的,因为我是从 Dialog 调用它,需要在它前面加上 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);
        }
    }
}
于 2016-07-07T03:22:10.113 回答
0

我有同样的错误。它是这样解决的:

只是改变:

Manifest.permission.READ_CONTACTS

amdroid.Manifest.permission.READ_CONTACTS
于 2020-07-24T09:52:59.417 回答
0

而不是尝试这个例子。它非常适合我..

https://learnpainless.com/android/marshmallows/runtime-permission-example-good-practice-real-example

于 2016-07-07T01:25:39.173 回答