2016-03-14 4 views
-1

Я пытаюсь реализовать разрешения времени выполнения для Android в своем приложении. Однако Android Studio, похоже, не индексируется должным образом. Ниже приведен код из примера Google.Разрешения Runtime для Android Marshmallow не работают должным образом

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. 
    } 
    } 
} 

Это показывает не может разрешить символ checkSelfPermission и неизвестный класс PackageManager.PERMISSION_GRANTED и не может разрешить символ READ_CONTACTS.

Вот 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' 
} 
+2

Похоже вашего разрешения проверки кода не внутри функции ... Это как ты иметь его в своем проекте? –

+1

Вау, спасибо, мне нужно было перемещать фигурные скобки из моего onCreate. Такая глупая ошибка, хотя –

ответ

1

Во-первых, проверка вашего разрешения не находится в функциональном блоке. Если исправление, которое работает, здорово! Если нет, можете ли вы проверить, заменит ли AppCompatActivity старым старым Activity трюк? Недавно я сделал что-то очень похожее, и, основываясь на беглом взгляде, вы, кажется, сделали все правильно.

2

Убедитесь, что вы также указать все разрешения в AndroidManifest. Не забудьте импортировать

import android.content.pm.PackageManager; 

в вашей деятельности.

+1

да, она в верхней части импортирована в моей операции импорта заявления выше –

+0

@TaylorCourtney Было бы хорошо, если бы вы могли принять ответ, если ваша проблема решена. Из [здесь] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work): «Принимать ответ важно, поскольку он оба вознаграждает плакаты для решения вашей проблемы и информирует других что ваша проблема решена ». –

+0

спасибо за подсказку: «все разрешения в AndroidManifest» – Dmitry

1

Использование

android.Manifest.permission.READ_CONTACTS 

вместо

Manifest.permission.READ_CONTACTS 

ИЛИ Используйте приведенный ниже код

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); 
    } 
} 
Смежные вопросы