Android 6.0動的申請権限

6703 ワード

6.0から、グーグルはアップルからiOSの動的申請権限を学んだ(あるいは他のROMから参考にした).そこで、私たちのappはインストールできないので、実行中にある権限を使うときに、まず権限が取得されているかどうかをチェックし、いいえ、動的に申請する必要があります.
次に整理してコードでプロセス全体を説明します.まず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();
    }
}