2016-06-16 2 views
-1

매니페스트 파일에 모든 권한을 추가했습니다. Lollipop에서 모든 응용 프로그램은 응용 프로그램을 설치하는 동안 권한을 요청하지만 응용 프로그램이 marshmallow에 설치된 경우 권한이 묻지 않습니다.마쉬 멜로우에서 안드로이드 응용 프로그램 실행 중 권한 요청 방법

매니페스트 권한은

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- My Location --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
+3

[Android marshmallow request permission?] (http://stackoverflow.com/questions/33666071/android-marshmallow-request-permission) –

+0

의 중복 가능성이 있습니다. 마시맬로 기기에서 앱을 실행할 때 오류가 발생합니다. ? –

+0

아니요. 오류가 없습니다. 그러나 첫 번째 활동은 스플래시 화면이며지도가 채워지지 않는 Google지도입니다. 어떤 기능도 작동하지 않습니다. 권한은 설정> 응용 프로그램에서 추가해야합니다. 응용 프로그램을 설치하거나 실행할 때 묻는 것이 필요합니다. – Maria

답변

0

먼저 선언 :

// Assume thisActivity is the current activity 

    int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.WRITE_CALENDAR); 

요청 당신이 필요로하는 권한 :

,118,941 :

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

이 권한 요청 응답을 처리

1

타사 라이브러리를 사용하여 권한 프로세스를 간소화하려는 경우이 라이브러리가 도움이 될 수 있습니다. RxPermissions

0

Dexter

PermissionsDispatcher

첫째, 당신은 모든 권한을 분류 할 필요가있다. Android M 버전에서는 주로 Manifest 파일에서 ACCESS_NETWORK_STATE과 같은 일반 사용 권한과 위험한 사용 권한 (예 : ACCESS_FINE_LOCATION)으로 나뉩니다. 일반 사용자의 경우 설치시 사용자 알림 없이는 자동으로 부여되는 사용자를 요청할 필요가 없습니다. 매니페스트에 추가하기 만하면됩니다!

그러나 위험한 권한은 처리하기가 더 복잡합니다. 응용 프로그램이 시작되거나 해당 기능으로 실행되면 먼저 사용 권한이 Context.checkSelfPermission(String permission)에 의해 획득되었는지 여부를 확인해야합니다. Context.requestPermissions(String[] permissions, int requestCode)으로 전화하면 시스템 대화 상자에서 요청하고 결과는 onRequestPermissionsResult()입니다.

좋은 소식은 앱 실행에 따라 하나의 API로 여러 권한을 요청할 수 있다는 것입니다. 또한 위험한 권한은 여러 그룹으로 관리됩니다. 예를 들어, ACCESS_FINE_LOCATION을 요청하고 ACCESS_COARSE_LOCATION 권한을 취득하면됩니다.