Android权限 (代码区2)

public class AppSettingsDialogFragment extends DialogFragment {

    public static final String TAG = "AppSettingsDialogFragment";
    public static final int DEFAULT_SETTINGS_REQ_CODE = 16061;

    private static final String ARG_POSITIVE_BUTTON = "positiveButton";
    private static final String ARG_NEGATIVE_BUTTON = "negativeButton";
    private static final String ARG_RATIONALE_TITLE = "rationaleTitle";
    private static final String ARG_RATIONALE_MESSAGE = "rationaleMsg";
    private static final String ARG_REQUEST_CODE = "requestCode";

    private int positiveButton;
    private int negativeButton;
    private String rationaleTitle;
    private String rationaleMsg;
    private int requestCode;

    public AppSettingsDialogFragment() {

    }

    public static AppSettingsDialogFragment newInstance(
            @StringRes int positiveButton, @StringRes int negativeButton,
            @NonNull String rationaleTitle, @NonNull String rationaleMsg,
            int requestCode) {

        AppSettingsDialogFragment fragment = new AppSettingsDialogFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_POSITIVE_BUTTON, positiveButton);
        args.putInt(ARG_NEGATIVE_BUTTON, negativeButton);
        args.putString(ARG_RATIONALE_TITLE, rationaleTitle);
        args.putString(ARG_RATIONALE_MESSAGE, rationaleMsg);
        args.putInt(ARG_REQUEST_CODE, requestCode);
        fragment.setArguments(args);
        return fragment;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        if (getArguments() != null) {
            positiveButton = getArguments().getInt(ARG_POSITIVE_BUTTON);
            negativeButton = getArguments().getInt(ARG_NEGATIVE_BUTTON);
            rationaleTitle = getArguments().getString(ARG_RATIONALE_TITLE);
            rationaleMsg = getArguments().getString(ARG_RATIONALE_MESSAGE);
            requestCode = getArguments().getInt(ARG_REQUEST_CODE);
        }

        setCancelable(false);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setCancelable(false)
                .setTitle(rationaleTitle)
                .setMessage(rationaleMsg)
                .setPositiveButton(positiveButton, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (getContext() instanceof Activity) {
                            Activity activity = (Activity) getContext();
                            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
                            intent.setData(uri);
                            activity.startActivityForResult(intent, requestCode);
                        }
                    }
                })
                .setNegativeButton(negativeButton, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
        return builder.create();
    }

}
public class MainActivity extends AppCompatActivity implements RationaleDialogFragment.PermissionCallbacks {

    public static final String TAG = "MainActivity";

    private static final int RC_CAMERA = 0;

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

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        Log.i(TAG, "onRequestPermissionsResult:" + requestCode + "," + Arrays.toString(permissions) + "," + Arrays.toString(grantResults));
        switch (requestCode) {
            case RC_CAMERA: {
                // 如果请求被取消了,那么结果数组就是空的
                if (grantResults.length > 0) {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // 权限被授予了
                        showCameraPreview();
                    } else {
                        // 权限被拒绝了
                        if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                                Manifest.permission.CAMERA)) {
                            // 向用户显示一个对话框引导用户跳转到"设置>应用>[你的应用]"页面
                            // 让用户手动授予该权限
                            AppSettingsDialogFragment
                                    .newInstance(android.R.string.ok, android.R.string.cancel,
                                            getString(R.string.permissions_required),
                                            getString(R.string.rationale_ask_again),
                                            AppSettingsDialogFragment.DEFAULT_SETTINGS_REQ_CODE)
                                    .show(getSupportFragmentManager(), AppSettingsDialogFragment.TAG);
                        }
                    }
                }
                return;
            }
        }

    }

    public void showCamera(View view) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {

            // 我们应该给用户个解释?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.CAMERA)) {

                // 向用户显示一个解释,要以异步非阻塞的方式
                // 该线程将等待用户响应!等用户看完解释后再继续尝试请求权限
                RationaleDialogFragment
                        .newInstance(android.R.string.ok, android.R.string.cancel,
                                getString(R.string.rationale_camera), RC_CAMERA,
                                new String[]{Manifest.permission.CAMERA})
                        .show(getSupportFragmentManager(), RationaleDialogFragment.TAG);
            } else {

                // 不需要向用户解释了,我们可以直接请求该权限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
                        RC_CAMERA);
            }
        } else {
            showCameraPreview();
        }

    }

    private void showCameraPreview() {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.content_fragment, CameraPreviewFragment.newInstance())
                .addToBackStack("camera")
                .commit();
    }

    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {
        Log.i(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size());
    }

    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
        Log.i(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == AppSettingsDialogFragment.DEFAULT_SETTINGS_REQ_CODE) {
            Log.i(TAG, "onActivityResult:" + requestCode + ":" + data);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值