標籤:oca sensor cts out 使用 find broadcast tor com
程式運行是的許可權分為兩種,一種是普通許可權,一種是危險許可權。普通許可權的話可以直接使用,只有危險許可權需要詢問使用者的同意。
危險許可權分組以及組內許可權如下:
註:危險許可權同一組內有一項許可權被授權,則一組許可權都被授權。
1 group:android.permission-group.CONTACTS 2 permission:android.permission.WRITE_CONTACTS 3 permission:android.permission.GET_ACCOUNTS 4 permission:android.permission.READ_CONTACTS 5 6 group:android.permission-group.PHONE 7 permission:android.permission.READ_CALL_LOG 8 permission:android.permission.READ_PHONE_STATE 9 permission:android.permission.CALL_PHONE10 permission:android.permission.WRITE_CALL_LOG11 permission:android.permission.USE_SIP12 permission:android.permission.PROCESS_OUTGOING_CALLS13 permission:com.android.voicemail.permission.ADD_VOICEMAIL14 15 group:android.permission-group.CALENDAR16 permission:android.permission.READ_CALENDAR17 permission:android.permission.WRITE_CALENDAR18 19 group:android.permission-group.CAMERA20 permission:android.permission.CAMERA21 22 group:android.permission-group.SENSORS23 permission:android.permission.BODY_SENSORS24 25 group:android.permission-group.LOCATION26 permission:android.permission.ACCESS_FINE_LOCATION27 permission:android.permission.ACCESS_COARSE_LOCATION28 29 group:android.permission-group.STORAGE30 permission:android.permission.READ_EXTERNAL_STORAGE31 permission:android.permission.WRITE_EXTERNAL_STORAGE32 33 group:android.permission-group.MICROPHONE34 permission:android.permission.RECORD_AUDIO35 36 group:android.permission-group.SMS37 permission:android.permission.READ_SMS38 permission:android.permission.RECEIVE_WAP_PUSH39 permission:android.permission.RECEIVE_MMS40 permission:android.permission.RECEIVE_SMS41 permission:android.permission.SEND_SMS42 permission:android.permission.READ_CELL_BROADCASTS
申請許可權:
以擷取撥打到電話call許可權為例。
首先在 AndroidManifest.xml 檔案中聲明所需的許可權:
<uses-permission android:name="android.permission.CALL_PHONE"/>
在布局檔案中設定一個按鈕,然後在MainActivity中編寫相關申請許可權的邏輯。
申請主要分三個部分:
1.設定按鈕點擊事件,通過checkSelfPermission方法來判斷是否有相關許可權,如果沒有許可權,則調用requestPermissions方法來詢問使用者是否授權,如果有許可權,則直接調用call()來進行執行。
2.在第一步調用完requestPermissions方法後,無論使用者選擇授權與否,都會回調到onRequestPermissionsResult()方法中,授權結果封裝在grantResults參數中,所以判斷授權結果,如果授權同意,則調用call方法,不同意則提示未獲得授權。
3.call方法具體,使用隱藏intent方法,動作為撥打到電話,並設定相應電話號碼,執行intent動作。為了防止程式奔潰,這些放在try方法裡執行。
代碼如下:
1 public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 /*設定按鈕點擊事件,通過checkSelfPermission方法來判斷是否有相關許可權 9 * 如果沒有許可權,則調用requestPermissions方法來詢問使用者是否授權10 * 如果有許可權,則直接調用call()來進行執行*/11 Button makeCall = (Button) findViewById(R.id.make_call);12 makeCall.setOnClickListener(new View.OnClickListener() {13 @Override14 public void onClick(View view) {15 /*該方法傳入兩個參數,第一個是context,第二個是要獲得的許可權名。16 將傳回值與PackageManager.PERMISSION_GRANTED做比較*/17 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)18 != PackageManager.PERMISSION_GRANTED) {19 /*為獲得授權,調用requestPermissions方法向使用者申請授權,20 傳入三個參數:context,獲得的許可權名字串,以及請求碼,唯一值即可。*/21 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);22 } else {23 call();24 }25 }26 });27 }28 29 /*call方法具體,使用隱藏intent方法,動作為撥打到電話,並設定相應電話號碼,執行intent動作。30 * 為了防止程式奔潰,這些放在try方法裡執行。*/31 private void call() {32 try {33 Intent intent = new Intent(Intent.ACTION_CALL);34 intent.setData(Uri.parse("tel:10086"));35 startActivity(intent);36 } catch (SecurityException e) {37 e.printStackTrace();38 }39 }40 41 @Override42 public void onRequestPermissionsResult(int requestCode, String[] permissions,43 int[] grantResults) {44 switch (requestCode) {45 case 1:46 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {47 call();48 } else {49 Toast.makeText(this, "you denied the permission", Toast.LENGTH_LONG).show();50 }51 break;52 default:53 }54 }55 }
Android內容提供器——運行許可權