android 相机权限检查

PackageManager pm = getActivity().getPackageManager();
              if(! (pm.checkPermission("android.permission.CAMERA", "com.zxc.criminalintent")==PackageManager.PERMISSION_GRANTED ) )                       
              {
              Intent i = new Intent(getActivity(), CrimeCameraActivity.class);
              CrimeFragment.this.startActivityForResult(i, CrimeFragment.this.REQUEST_PHOTO);
              }
              else
              {
              Toast.makeText(CrimeFragment.this.getActivity(), 
                      "请在设置中打开相机权限", Toast.LENGTH_SHORT)
                      .show();

              }


   @TargetApi(9)
    @Override
    public void onResume() {
        super.onResume();
        Log.i(TAG, "camera fragment resuming   " );
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 
            try {
            mCamera = Camera.open(0);
                
          } catch (Exception exception) {
              Log.e(TAG, "Error setting up preview display", exception);
              if (mCamera!=null)
      {
      mCamera.release();
      }
              AlertDialog.Builder builder = new AlertDialog.Builder(CrimeCameraFragment.this.getActivity());
              builder.setTitle("提示");
              builder.setMessage("请检查相机权限设置");
              builder.setCancelable(false);
              builder.setPositiveButton("确定",new OnClickListener()
              {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
CrimeCameraFragment.this.getActivity().finish();
}
             
              });
              builder.create().show();
              return ;
          }
//         try{
//        
//          mCamera = Camera.open(Camera.getNumberOfCameras()-1);
//         //  Camera.Parameters parameter = mCamera.getParameters();
//         //  mCamera.setParameters(parameter);
//          }
//          catch(RuntimeException e){
//        
//           //System.out.println("open()方法有问题");
//          
//           Toast.makeText(this.getActivity(), 
//                       "请在设置中打开相机权限", Toast.LENGTH_SHORT)
//                       .show(); 
//          }
            //mCamera = Camera.open(0);
      } else {
     try {
          mCamera = Camera.open();
              
        } catch (Exception exception) {
            Log.e(TAG, "Error setting up preview display", exception);
            if (mCamera!=null)
    {
    mCamera.release();
    }
            AlertDialog.Builder builder = new AlertDialog.Builder(CrimeCameraFragment.this.getActivity());
            builder.setTitle("提示");
            builder.setMessage("请检查相机权限设置");
            builder.setCancelable(false);
            builder.setPositiveButton("确定",new OnClickListener()
            {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
CrimeCameraFragment.this.getActivity().finish();
}
           
            });
            builder.create().show();
            return ;
        }
//       try{
//      mCamera = Camera.open();
//     // Camera.Parameters parameter = mCamera.getParameters();
//   // mCamera.setParameters(parameter);
//      }
//      catch(RuntimeException e){
//    
//      // System.out.println("open()方法有问题");
//     Toast.makeText(this.getActivity(), 
//                     "请在设置中打开相机权限", Toast.LENGTH_SHORT)
//                     .show(); 
//      }
          //mCamera = Camera.open();
      }
    }

Android6.0以下系统判断相机权限

 

 关于Android权限检测问题 在6.0系统以后由于使用的是动态权限 很好判断 关键是6.0之前的系统发现没有可用的API来获取相应的权限是否被用户禁用或者允许使用。

其中有相应的 checkPermission()方法  但是这些方法只是判断清单文件中是否注册过此类权限。用户的操作是获取不到的。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.                   
  2. PackageManager packageManager = getPackageManager();  
  3. int permission = packageManager.checkPermission("android.permission.CAMERA""your packageName");  
  4. if(PackageManager.PERMISSION_GRANTED == permission){  
  5.     //有这个权限   
  6. }else {  
  7.     //没有这个权限  
  8. }  


那我们如何在6.0以下的系统检测权限呢?
目前的方法是使用 try{ } catch() {} 的方式 :

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2. *  返回true 表示可以使用  返回false表示不可以使用 
  3. */  
  4. public boolean cameraIsCanUse() {  
  5.         boolean isCanUse = true;  
  6.         Camera mCamera = null;  
  7.         try {  
  8.             mCamera = Camera.open();  
  9.             Camera.Parameters mParameters = mCamera.getParameters(); //针对魅族手机  
  10.             mCamera.setParameters(mParameters);  
  11.         } catch (Exception e) {  
  12.             isCanUse = false;  
  13.         }  
  14.   
  15.         if (mCamera != null) {  
  16.             try {  
  17.                 mCamera.release();  
  18.             } catch (Exception e) {  
  19.                 e.printStackTrace();  
  20.                 return isCanUse;  
  21.             }  
  22.         }  
  23.         return isCanUse;  
  24.     }  


 
  

这种方式目前也是一种折中的方法。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值