Android內容提供器——運行許可權

來源:互聯網
上載者:User

標籤: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內容提供器——運行許可權

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.