android - 用户 Android M 在应用程序中授予的权限

标签 android android-6.0-marshmallow

我想在我的应用程序中。如果已授予权限,则不会在android中显示对话框 这是我的代码

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.button:
                requestContactsPermissions();
            break;
        case R.id.button1:
          //  requestCameraPermissions();
            Toast.makeText(mcontext, "Hello", Toast.LENGTH_LONG).show();
            break;
    }

}

private void requestContactsPermissions() {

     boolean requestPermission = PersimissionTest.requestContactsPermissions(this);

    if (requestPermission == true) {
        ActivityCompat.requestPermissions(this, PERMISSIONS_CONTACTS, REQUEST_ID);

    } else {
       ActivityCompat.requestPermissions(this, PERMISSIONS_CONTACTS, REQUEST_ID);

    }

}

@覆盖 公共(public)无效onRequestPermissionsResult(int requestCode,字符串权限[],int [] grantResults){

    if (requestCode == REQUEST_ID) {

        if (PersimissionTest.verifyPermissions(grantResults)) {

            Toast.makeText(mcontext, "Contacts permissions granted.", Toast.LENGTH_LONG).show();

        } else {
            Toast.makeText(mcontext, "Contacts permissions were not granted.", Toast.LENGTH_LONG).show();
        }

    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

最佳答案

像这样请求权限,如果已经授予权限,则插入联系人,否则它将请求权限

private void insertDummyContactWrapper(String mStringPhoneContactName, String mStringPhoneContactNumber) {
    boolean hasWriteContactsPermission = ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_CONTACTS);
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(SwipableHomeActivity.this, new String[]{android.Manifest.permission.WRITE_CONTACTS}, CONSTANTS.MY_PERMISSIONS_REQUEST_WRITE_CONTACTS);
        return;
    }
    //Insert Contact
}

获取像这样的权限结果

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case CONSTANTS.MY_PERMISSIONS_REQUEST_WRITE_CONTACTS:

            if (grantResults != null && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                ReadPhoneContacts(getApplicationContext(), mStringPhoneContactName, mStringPhoneContactNumber);
            } else {
                Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
            }
            break;
    }
}

检查我已在您的问题中实现了这一点

 public static boolean requestContactsPermissions(Activity activity) {
    boolean requestPermission;
    if (ContextCompat.checkSelfPermission(activity, android.Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
        requestPermission = true;
    }else{
        requestPermission = false;
    }
    return requestPermission;
}

public static boolean requestCameraPermissions(Activity activity) {
    boolean requestPermission;
    if (ContextCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
        requestPermission = true;
    } else {
        requestPermission = false;
    }
    return requestPermission;
}

用这个改变你的类(class)

public class MainActivity extends AppCompatActivity implements
    OnRequestPermissionsResultCallback, OnClickListener{

public static final String TAG = "PermissionActivity";

private View mLayout;
Button mButtonCheckPermission = null;

private static final int REQUEST_CONTACTS = 1;
private static String[] PERMISSIONS_CONTACT = {Manifest.permission.READ_CONTACTS,
        Manifest.permission.WRITE_CONTACTS};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initView();
}

private void initView() {
    mButtonCheckPermission = (Button) findViewById(R.id.button_check_permissions);
    mButtonCheckPermission.setOnClickListener(this);

    mLayout = findViewById(R.id.sample_main_layout);

}

@Override
public void onClick(View v) {

    switch (v.getId()) {
        case R.id.button_check_permissions:
            requestContactsPermissions();
            break;

        default:
            break;
    }

}

private void requestContactsPermissions() {

    boolean requestPermission = PermissionUtil.requestContactsPermissions(this);

    if (requestPermission == true){

        Log.i(TAG,
                "Displaying contacts permission rationale to provide additional context.");

        // Display a SnackBar with an explanation and a button to trigger the request.

        if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {

            Snackbar.make(mLayout, R.string.permission_contacts_rationale,
                    Snackbar.LENGTH_INDEFINITE)
                    .setAction(R.string.ok, new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS_CONTACT,
                                    REQUEST_CONTACTS);
                        }
                    })
                    .show();
        }else{
            Snackbar.make(mLayout, R.string.permision_available_contacts,
                    Snackbar.LENGTH_LONG)
                    .show();
        }
    }
    else {

        ActivityCompat.requestPermissions(this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);

    }

}

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

    if (requestCode == REQUEST_CONTACTS) {
        Log.i(TAG, "Received response for contact permissions request.");

        // We have requested multiple permissions for contacts, so all of them need to be
        // checked.
        if (PermissionUtil.verifyPermissions(grantResults)) {
            // All required permissions have been granted, display contacts fragment.
            Snackbar.make(mLayout, R.string.permision_available_contacts,
                    Snackbar.LENGTH_LONG)
                    .show();
        } else {
            Log.i(TAG, "Contacts permissions were NOT granted.");
            Snackbar.make(mLayout, R.string.permissions_not_granted,
                    Snackbar.LENGTH_LONG)
                    .show();
        }

    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}}

关于android - 用户 Android M 在应用程序中授予的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650908/

相关文章:

android - Salesforce SDK - 无法使用 Android 6.0 构建目标解析 org.apache.http.* API

android - 如何在权限请求中添加多个权限

java - 与棉花糖相比,牛轧糖要慢得多

android - 如何创建可滚动的选项卡?

android - 覆盖Android应用程序的主执行线程

android - 迁移对 Android X : Are versions consistent across Modules? 的支持

android - 如何从 Gradle Dependency 中找到库的版本?安卓工作室

android - 如何在 Android 设备中禁用强制网络助手?

android - 如何在没有 "Never ask again"选项的情况下请求权限对话框?

android - 服务是否可以同时启动和绑定(bind)