在安卓的6.0上對權限做了改進,讓用戶知道你的程序正在請求什麼敏感的權限。那麼程序就要做一個適配,在as的自動生成代碼上活捉了一個權限請求的官方寫法,這個寫法在官方的文檔上也是有的,也有很詳細的介紹,我這裏就做一個記錄,至於什麼權限需要這樣寫,什麼權限不需要,這個去谷歌去吧,而且現在谷歌開發者的已經在中國有了cn域名,多多上去看看吧。
private boolean mayRequestContacts() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return true; } if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { return true; } if (shouldShowRequestPermissionRationale(READ_CONTACTS)) { Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE) .setAction(android.R.string.ok, new View.OnClickListener() { @Override @TargetApi(Build.VERSION_CODES.M) public void onClick(View v) { requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); } }); } else { requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); } return false; }
這個方法是需要override的,下面的註解還是寫得挺清楚的
/** * Callback received when a permissions request has been completed. */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_READ_CONTACTS) { if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { populateAutoComplete(); } } }
private void populateAutoComplete() { if (!mayRequestContacts()) { return; } getLoaderManager().initLoader(0, null, this); }
這個是請求通訊錄的一個例子,仿照來寫就好了
如果大家有什麼不明白的,想看看是怎麼樣的,可以到as上創建一個loginActivity就可以了,裏面會有官方寫好的代碼。