2016-10-10 78 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

相關問題