如何在android 6.0 marshmallow中使用权限?

时间:2015-11-13 13:34:34

标签: android permissions manifest android-6.0-marshmallow

直到现在我使用较低版本,所以我在我的应用程序的清单文件中添加了权限。但是在android 6.0 marshmallow中我们需要使用运行时权限。

任何人都可以解释如何在6.0中使用权限或提供任何链接。 提前致谢。

代码:

private static final int REQUEST_CAMERA = 0;
private static final int REQUEST_CONTACTS = 1;
private static final int REQUEST_LOCATION = 2;
private static final int REQUEST_PHONE = 3;
private static final int REQUEST_SMS = 4;
private static final int REQUEST_STORAGE = 5;

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

        switch(requestCode) {
            case REQUEST_CAMERA:
                if (canAccessCamera()) {
                    doCameraThing();
                }
                else {
                    bzzzt();
                }
                break;

            case REQUEST_CONTACTS:
                if (canAccessContacts()&&canAccessContacts1()) {
                    doContactsThing();
                }
                else {
                    bzzzt();
                }
                break;

            case REQUEST_LOCATION:
                if (canAccessLocation()&&canAccessLocation_1()) {
                    doLocationThing();
                }
                else {
                    bzzzt();
                }
                break;
            case REQUEST_PHONE:
                if (canAccessPhone()) {
                    dophoneThing();
                }
                else {
                    bzzzt();
                }
                break;
            case REQUEST_SMS:
                if (canAccessSms()&&canAccessSms1() && canAccessSms2()) {
                    doSmsThing();
                }
                else {
                    bzzzt();
                }
                break;
            case REQUEST_STORAGE:
                if (canAccessStorage()) {
                    dostorageThing();
                }
                else {
                    bzzzt();
                }
                break;
        }
    }

//location

    private boolean canAccessLocation() {
        return(hasPermission(Manifest.permission.ACCESS_FINE_LOCATION));
    }
    private boolean canAccessLocation_1() {
        return(hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION));
    }



    //phone
    private boolean canAccessPhone() {
        return(hasPermission(Manifest.permission.READ_PHONE_STATE));
    }
    private boolean canAccessStorage() {
        return(hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE));
    }


    //sms
    private boolean canAccessSms() {
        return(hasPermission(Manifest.permission.READ_SMS));
    }
    private boolean canAccessSms1() {
        return(hasPermission(Manifest.permission.SEND_SMS));
    }
    private boolean canAccessSms2() {
        return(hasPermission(Manifest.permission.RECEIVE_SMS));
    }


    //camera
    private boolean canAccessCamera() {
        return(hasPermission(Manifest.permission.CAMERA));
    }

    //contact

    private boolean canAccessContacts() {
        return(hasPermission(Manifest.permission.READ_CONTACTS));
    }
    private boolean canAccessContacts1() {
        return(hasPermission(Manifest.permission.WRITE_CONTACTS));
    }

    private boolean hasPermission(String perm) {
        return(PackageManager.PERMISSION_GRANTED==checkSelfPermission(perm));
    }

    private void bzzzt() {
        Toast.makeText(this, R.string.toast_bzzzt, Toast.LENGTH_LONG).show();
    }

    private void doCameraThing() {
        Toast.makeText(this, R.string.toast_camera, Toast.LENGTH_SHORT).show();
    }

    private void doContactsThing() {
        Toast.makeText(this, R.string.toast_contacts, Toast.LENGTH_SHORT).show();
    }

    private void doLocationThing() {
        Toast.makeText(this, R.string.toast_location, Toast.LENGTH_SHORT).show();
    }
    private void doSmsThing() {
        Toast.makeText(this, R.string.toast_sms, Toast.LENGTH_SHORT).show();
    }

    private void dostorageThing() {
        Toast.makeText(this, R.string.toast_storage, Toast.LENGTH_SHORT).show();
    }

    private void dophoneThing() {
        Toast.makeText(this, R.string.toast_phone, Toast.LENGTH_SHORT).show();
    }




    <string name="toast_camera">Camera Permissions have been granted!</string>
    <string name="toast_contacts">Contacts Permissions have been granted</string>
    <string name="toast_location">Location Permissions have been granted</string>
    <string name="toast_phone">Phone Permissions have been granted!</string>
    <string name="toast_storage">Storage Permissions have been granted</string>
    <string name="toast_sms">Sms Permissions have been granted</string>

我写了这段代码。但我在android 6.0中测试过。它又崩溃了。请告诉我我做错了什么。

1 个答案:

答案 0 :(得分:1)

检查this博客。它解释了与Android M权限相关的所有内容