Android 6.0 动态申请权限

来源:互联网 发布:吉林大学网络教育查询 编辑:程序博客网 时间:2024/05/03 04:00

从6.0开始,谷歌从苹果那里学习了iOS的动态申请权限这一套(或者是从其他ROM那里借鉴的)。于是,我们的app就不能安装上就一劳永逸了,需要在运行过程要用到某个权限的时候先检查权限是否获取,否的话还要动态申请。

下面整理用代码说明一下整个过程。首先仍然要在menifest.xml中标明需要申请的权限,这里以读取联系人为例。App需要设置target SDK为23(Android6.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();    }}
0 0
原创粉丝点击