简体   繁体   English

Android棉花糖运行时权限无法正常运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM