升級sdk的時候,sdk要求適配版本最低要求爲9編譯目標版本爲23,
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="23" />
不是專業搞安卓的對這塊也不是很瞭解,後面發現獲取手機IMEI的時候,APP會卡主,發現是因爲 獲取不到READ_PHONE_STATE權限。然後各種百度谷歌,看到網上說的安卓6.0以後 targetSdkVersion >= 23的時候需要詢問獲取權限,而後有了下面的內容。
首先來看頭文件,除了最後兩個上面的基本是必須包含的,V4的話是因爲我的jar包是android-support-v4.jar,如果是V7啥的,直接對應的改一下
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.widget.TextView;
import android.widget.Toast;
接下來看一個判斷權限代碼
public void requestGetPermission(){
if(Build.VERSION.SDK_INT >= 23){//targetSdkVersion大於23的話,需要申請權限
pref = getPreferences(Context.MODE_PRIVATE);
boolean permission_requested = pref.getBoolean(PERMISSION_CHECK_KEY, false);
int checkCallPhonePermission = ContextCompat.checkSelfPermission(this,READ_PHONE_STATE);
if (permission_requested == false || checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
requestPermission();
}
else{
//TODO: Code that continue to play game here.
}
}else{
//TODO: Code that continue to play game here.
}
}
解釋一下PERMISSION_CHECK_KEY是一個自定義的字符串值,ContextCompat.checkSelfPermission() 檢查是否有權限,pref.getBoolean()獲取自定義字符串key的值,如果沒有返回false,requestPermission()請求權限的方法,貼在下面
private void requestPermission(){
ActivityCompat.requestPermissions(this, new String[]{READ_PHONE_STATE}, REQUEST_READ_PHONE_CODE);
}
REQUEST_READ_PHONE_CODE 是一個自定義的返回值
public static final int REQUEST_READ_PHONE_CODE = 1;
ActivityCompat.requestPermissions()詢問權限接口,之後就是在回調函數裏面看是否請求權限成功。回調代碼貼下面
//@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_READ_PHONE_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean(PERMISSION_CHECK_KEY, true);
editor.commit();
} else {
// Permission Denied
//這裏可以執行一些自定義操作
Toast toast = Toast.makeText(this, "申請獲取手機識別碼權限,請授權後重新測試", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
else
{
//這裏可以執行一些自定義操作
Toast toast = Toast.makeText(this, "申請獲取手機識別碼權限,請授權後重新測試", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
至此,打工告成,
非專業安卓,如寫的不對煩請各路大神評論席指導一下!!!
這篇博文寫的還不錯這裏推薦一下:https://blog.csdn.net/fenggering/article/details/53432401