2016-10-10 50 views
0

我正在开发第三方可以使用的SDK(.aar)。在我使用aar的示例应用程序中,我可以看到应用程序不提示摄像头权限。当我打开AAR和看到它的manifest.xm,它包含以下:Android应用程序不要求相机权限

<!-- WRITE_EXTERNAL_STORAGE is needed because we are storing there the config files of KM --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.read_external_storage" /> 
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" /> 
<uses-permission android:name="android.permission.CAMERA" /> 

<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-feature android:name="android.hardware.sensor.accelerometer" /> 

由于相机存在的所需的权限谁能告诉我为什么安装示例应用程序时,它不来了。

+0

你在哪里,你是如何寻找它“上来”? – CommonsWare

+0

是否因为您正在将它安装在使用Android 6.0的设备上? – NecipAllef

+0

当我手动将apk安装到手机上并尝试安装时,应用程序使用的功能列表(如录制音频,修改存储空间,但没有相机标志)。我正在使用Android版本4.4.4。 – Sid

回答

0

这是我如何检查权限:

public boolean permissionsGranted() { 

    boolean allPermissionsGranted = true; 
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { 
     boolean hasWriteExternalPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); 
     boolean hasReadExternalPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); 
     boolean hasCameraPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED); 
     if (!hasWriteExternalPermission || !hasReadExternalPermission || !hasCameraPermission) { 
      allPermissionsGranted = false; 
     } 
    } 
    return allPermissionsGranted; 
} 

我这是怎么发出请求,如果permissionsGranted()方法返回false

String[] permissions = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA, android.Manifest.permission.READ_EXTERNAL_STORAGE}; 
         ActivityCompat.requestPermissions(this, permissions, 1); 

而且你必须重写onRequestPermissionsResult方法,下面是我在我的。

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case 1: { 
      boolean startActivity = true; 
      for (int i = 0; i < grantResults.length; i++) { 
       if (grantResults.length > 0 && grantResults[i] != PackageManager.PERMISSION_GRANTED) { 
        String permission = permissions[i]; 
        boolean showRationale = shouldShowRequestPermissionRationale(permission); 
        if (!showRationale) { 
         Intent intent = new Intent(); 
         intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
         Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null); 
         intent.setData(uri); 
         startActivityWithIntent(intent); 
         Toast.makeText(this, "Enable required permissions", Toast.LENGTH_LONG).show(); 
         startActivity = false; 
         break; 
        } else { 
         Toast.makeText(this, "Enable required permissions", Toast.LENGTH_LONG).show(); 
         break; 
        } 
       } 
      } 
      if(startActivity) { 
       getActivity().finish(); 
       startActivityWithIntent(getIntent()); 
      } 
     } 
    } 
} 

public void startActivityWithIntent(Intent intent){ 
    startActivity(intent); 
} 

showRationale是检查用户圈选再也不会问,如果是这样的话,我开始设置活动,以便用户可以启用权限。

让我知道,如果你需要更多的清晰度

+0

我不需要检查权限,我需要知道为什么我没有提示相机权限,即使我的清单拥有它。 – Sid

+0

棉花糖下面的任何东西都不应该提示您提供权限,只会在棉花糖及以上提示权限。也许你想打开相机?我们可以看到你的代码吗? – upile

相关问题