FC 7.3.2 執行時許可權及其獲取通訊錄例項
阿新 • • 發佈:2018-11-24
- 定義
- 24種執行時許可權
- 獲取通訊錄例項
執行時許可權(Dangerous Permissions)
在保護使用者隱私方面:Android6.0為了更好的保護個人隱私,添加了執行時許可權:
- 分為兩類,一類是Normal Permissions,這類許可權不涉及個人隱私,不需要使用者進行授權,比如手機震動,訪問網路;
- 一類是Dangerous Permissions,這類許可權涉及個人隱私,需要使用者進行授權,比如讀取SD卡,訪問通訊錄等。
在使用者操作方面:當執行敏感操作之前彈出對話方塊,請求許可權,可以拒絕,可以同意;可以在設定頁面對APP的許可權進行檢視,以及對單個許可權進行授權或者解除授權。
執行時許可權包括如下(九組24個):
group:android.permission-group.CONTACTS 通訊錄方面 permission:android.permission.WRITE_CONTACTS 寫入通訊錄 permission:android.permission.GET_ACCOUNTS 訪問通訊錄許可權 permission:android.permission.READ_CONTACTS 讀取通訊錄 group:android.permission-group.PHONE 電話方面 permission:android.permission.READ_CALL_LOG 看電話記錄 permission:android.permission.READ_PHONE_STATE 讀取手機狀態 permission:android.permission.CALL_PHONE 打電話 permission:android.permission.WRITE_CALL_LOG 編寫呼叫日誌 permission:android.permission.USE_SIP 使用SIP permission:android.permission.PROCESS_OUTGOING_CALLS 過程輸出呼叫 permission:com.android.voicemail.permission.ADD_VOICEMAIL 新增語音信箱 group:android.permission-group.CALENDAR 日曆 permission:android.permission.READ_CALENDAR 讀取日曆 permission:android.permission.WRITE_CALENDAR 寫入日曆 group:android.permission-group.CAMERA 照相機 permission:android.permission.CAMERA group:android.permission-group.SENSORS 感測器 permission:android.permission.BODY_SENSORS 體感測器 group:android.permission-group.LOCATION 位置 permission:android.permission.ACCESS_FINE_LOCATION 獲取好位置 permission:android.permission.ACCESS_COARSE_LOCATION 獲取粗定位group:android.permission-group.STORAGE 儲存 permission:android.permission.READ_EXTERNAL_STORAGE 讀取外部儲存器 permission:android.permission.WRITE_EXTERNAL_STORAGE 寫外部儲存器 group:android.permission-group.MICROPHONE 擴音器;麥克風 permission:android.permission.RECORD_AUDIO 錄音 group:android.permission-group.SMS 資訊 permission:android.permission.READ_SMS 讀取資訊 permission:android.permission.RECEIVE_WAP_PUSH 收到WAP推送 permission:android.permission.RECEIVE_MMS 接收彩信 permission:android.permission.RECEIVE_SMS 收資訊 permission:android.permission.SEND_SMS 發信息
獲取通訊錄例項
- 主介面新增一個listview
- 配置檔案新增許可權<uses-permission android:name="android.permission.READ_CONTACTS" />
- MainActivity中編寫程式碼
- ContextCompat.checkSelfPermission方法判斷使用者是不是給我們授權了,裡邊的第一個引數是context,第二個引數是具體的許可權名,使用方法的返回值和PackageManager.PERMISSION_GRANTED作比較,相等就說明使用者已經授權,否則就沒有授權
- 如果已經授權了,直接執行邏輯即可。如果之前沒有授權,則呼叫ActivityCompat.requestPermissions方法
- 呼叫完requestPermissions方法後,彈出許可權申請的對話方塊,使用者可以同意或者拒絕,結果會回撥onRequestPermissionsResult方法,所以我們重寫了這個方法,我們判斷授權結果,如果授權了就執行邏輯,沒有授權就彈出提示框。
public class MainActivity extends AppCompatActivity {
ArrayAdapter<String> adapter;
List<String> contactsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView contactsView = (ListView) findViewById(R.id.contacts_view);
adapter = new ArrayAdapter<String>(this, android.R.layout. simple_list_item_1, contactsList);
contactsView.setAdapter(adapter);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_CONTACTS }, 1);
} else {
readContacts();
}
}
private void readContacts() {
Cursor cursor = null;
try {
// 查詢聯絡人資料
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
// 獲取聯絡人姓名
String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
// 獲取聯絡人手機號
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactsList.add(displayName + "\n" + number);
}
adapter.notifyDataSetChanged();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
readContacts();
} else {
Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
}