Android 6.0動的申請権限
6703 ワード
6.0から、グーグルはアップルからiOSの動的申請権限を学んだ(あるいは他のROMから参考にした).そこで、私たちのappはインストールできないので、実行中にある権限を使うときに、まず権限が取得されているかどうかをチェックし、いいえ、動的に申請する必要があります.
次に整理してコードでプロセス全体を説明します.まずmenifestでxmlには申請が必要な権限が明記されており、ここでは連絡先の読み取りを例に挙げます.Appはtarget SDKを23(Android 6.0)に設定する必要があります.
権限が必要な場所で
次に整理してコードでプロセス全体を説明します.まずmenifestでxmlには申請が必要な権限が明記されており、ここでは連絡先の読み取りを例に挙げます.Appはtarget SDKを23(Android 6.0)に設定する必要があります.
<uses-permission android:name="android.permission.READ_CONTACTS" />
権限が必要な場所で
package com.example.stone.permisson6demo;
import android.Manifest;
...
public class MainActivity extends AppCompatActivity {
// , code int , 255 code 8 bits!
private static final char MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// , explain , 。
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.READ_CONTACTS)) {
showPermissionDialog();
} else {
showMessage(" ?");
// explain , , requestCode, 。
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
} else {
showMessage(" ");
}
}
});
}
private void showPermissionDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositiveButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
}).setNegativeButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
showMessage(" ");
}
}).setTitle(" ").create().show();
}
...
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// ,
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS:
if(grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showMessage(" ");
} else {
showMessage(" 。。。");
}
} else {
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private void showMessage(String message) {
Toast.makeText(MainActivity.this,
message, Toast.LENGTH_SHORT).show();
}
}