2016-03-04 52 views
1

我想支持我的應用程序Android M?我有一些權限需要明確要求在運行時。我能夠訪問其他權限在運行時,但「 android.permission.READ_PHONE_STATE「導致SecurityException。引起︰java.lang.SecurityException︰android.permission.READ_PHONE_STATE

這裏是我的清單文件:

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="23" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<!-- Map related permissions --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<!-- --> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
+0

請發表您的gradle這個代碼 – Amy

+0

HTTPS我的代碼://developer.android.com/intl/in/training/permissions/requesting.html –

+0

@Amy我正在使用eclipse ..我沒有看到任何gradle。 – Joe

回答

1

在您的應用的build.gradle

<uses-sdk 
android:minSdkVersion="14" 
android:targetSdkVersion="23" /> 

變化

<uses-sdk 
android:minSdkVersion="14" 
android:targetSdkVersion="22" /> 

並從這些manifest.xml中一行。 然後它也會在android M中工作。

請參閱本

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "your.package.name" 
     minSdkVersion 14 
     targetSdkVersion 22 
     // other lines defaultConfig 
    } 
// other lines in android 
} 
+0

,謝謝,雅我知道它會在目標= 22,但我需要目標版本是23. – Joe

+0

把目標22.它也將在Android M工作。 – Android

+0

是你的權利..但我想在目標23中達到同樣的效果...... 23不可能嗎? – Joe

0

你需要在需要時爲permission要求,對M器件和處理,如果permission不granted.You可以參考Android文檔here

1

對於Android的23或更高,如果他們想給你一個許可,你需要明確地詢問你的用戶。兩種處理方法:除了在清單文件中指定外,還要將最大SDK版本設置爲22(或更低),或者在運行時詢問用戶。

有關如何在運行時詢問權限的詳細信息,請參閱Working with System Permissions。 「Requesting Permissions at Run Time」會話從第一個鏈接中解釋瞭如何在您的代碼中以非常詳細的方式執行此操作。

這就是說,在發佈問題之前嘗試做一些搜索。不鼓勵重複的問題。

其它鏈接,可以幫助你:similar question on StackOverFlow

+0

檢查這個答案。 –

0

你需要requestPermissions,這裏的一些例子

private final static int REQUEST_CODE_ASK_PERMISSIONS = 1002; 

@Override 
protected void onStart() { 
    super.onStart(); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

     int res = checkSelfPermission(Manifest.permission.READ_PHONE_STATE); 
     if (res != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 
        REQUEST_CODE_OVERLAY_PERMISSION); 
     } 

    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, 
     @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ASK_PERMISSIONS: 
      if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(MainActivity.this, "READ_PHONE_STATE Denied", Toast.LENGTH_SHORT) 
         .show(); 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

有關詳細信息,請參閱GitHub

相關問題