READ_PHONE_STATE

升級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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章