关于Android6.0权限问题做了个小demo

昨天在弄相机的问题,碰到了关于6.0的权限问题,相机打不开,或者是调用图库的时候 获取的图片地址 返回null

然后找了很多资料,,和修改才找到自身需要的. 

第1 如果是简单的 在activity页面 做 调用权限问题 这里以相机为主


public static final int REQUEST_CODE=200;
public static final int REQUEST_CODE_PICK_IMAGE=300;

private void checkPerm() {
    /**1.在AndroidManifest文件中添加需要的权限。
     *
     * 2.检查权限
     *这里涉及到一个API,ContextCompat.checkSelfPermission,
     * 主要用于检测某个权限是否已经被授予,方法返回值为PackageManager.PERMISSION_DENIED
     * 或者PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了。
     * */
    if(ContextCompat.checkSelfPermission(this, permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED){ //权限没有被授予

        /**3.申请授权
         * @param
         *  @param activity The target activity.(Activity|Fragment、)
         * @param permissions The requested permissions.(权限字符串数组)
         * @param requestCode Application specific request code to match with a result(int型申请码)
         *    reported to {@link OnRequestPermissionsResultCallback#onRequestPermissionsResult(
         *    int, String[], int[])}.
         * */


        ActivityCompat.requestPermissions(this,
                new String[]{permission.WRITE_EXTERNAL_STORAGE},
                REQUEST_CODE);


    }else{//权限被授予
        choosePhoto();

        //直接操作
    }

}

/***
 *
 * 4.处理权限申请回调
 */

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

    if (requestCode == REQUEST_CODE)
    {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
        {

            //权限被授予
            choosePhoto();

        } else
        {
            // Permission Denied
            Toast.makeText(TestPhoto.this, "Permission Denied", Toast.LENGTH_SHORT).show();
        }
        return;
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}



void choosePhoto(){
    /**
     * 打开选择图片的界面
     */
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");//相片类型
    startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);

}

最后进行回调


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode){
        case REQUEST_CODE_PICK_IMAGE:
            if (resultCode == RESULT_OK) {
                try {
                    /**
                     * 该uri是上一个Activity返回的
                     */
                    Uri uri = data.getData();
                    Bitmap bit = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
                    iv.setImageBitmap(bit);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d("tag", e.getMessage());
                    Toast.makeText(this,"程序崩溃", Toast.LENGTH_SHORT).show();
                }
            }
            break;
    }

}
************************************** 以上 是 再Activity 中调用********************************************************
 
 
************************************** 以下 是 在 Fragment 中调用********************************************************
在Activity中 调用权限是用的 
 ActivityCompat.requestPermissions(activity,权限名字,requestCode);
再Fragment中 用的是 Fragment自身携带的方法
requestPermissions(权限名字,requestCode)
把 获取权限的地方 替换成 
 if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) { //权限没有被授予
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
            } else {//权限被授予 直接操作
                choosePhoto();
            }
****************我的需求 再Fragment 里面 有子Fragment 怎么做呢.***********************
再父fragment里类添加 这样的代码, 然后再按上面 怎么实现Fragment的权限就行了!
 
 /*6.0 新特性
    *
    * 回调到父fragment 然后再传到子fragment里
    *
    * */
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        List<Fragment> fragments = getChildFragmentManager().getFragments();
        if (fragments != null) {
            for (Fragment fragment : fragments) {
                if (fragment != null) {
                    fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
                }
            }
        }
    }
第1次 发表文章  勿喷,, 只是为了让自己有1份记录!








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值