0

フォーク、Android Camera2 Pemanentの許可

永久に組み込まれたカメラの権限を自分のアプリに追加する方法はありますか?私のアプリはすぐに働く必要があります。なぜなら、ユーザーは、毎回のモーニング(自動的にする必要があります)ごとにアプリを初期化することを覚えていないからです。私は私のAndroidManifestに以下を追加しましたが、動作していないよう:

<uses-permission 
    android:required="true" 
    android:name="android.permission.CAMERA"/> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera2.full" /> 
<uses-feature android:name="android.hardware.camera2.autofocus" /> 

<uses-feature android:glEsVersion="0x00020000" android:required="true" /> 

<application 
    <activity 
     android:name="com.serenegiant.usbcameratest5.MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="sensorPortrait" 
     android:launchMode="singleTask" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter>   
     <intent-filter> 
      <action android:name="android.hardware.camera2.CameraDevice" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.hardware.camera2.CameraManager" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.hardware.camera2.CameraCharacteristics" /> 
     </intent-filter>   
     <meta-data 
      android:name="android.hardware.camera2.CameraManager" 
      android:resource="@xml/device_filter" /> 
     <meta-data 
      android:name="android.hardware.camera2.CameraDevice" 
      android:resource="@xml/device_filter" /> 
     <meta-data 
      android:name="android.hardware.camera2.CameraMetadata" 
      android:resource="@xml/device_filter" /> 
    </activity> 
</application> 

そして、ここでは、私はカメラを開こうとする私のコードですが、プログラムは私がコメントアウト許可コードを(必要と文句を言い

private void openCamera(int width, int height) { 
//   if (ContextCompat.checkSelfPermission(mWeakParent.clear(), Manifest.permission.CAMERA) 
//     != PackageManager.PERMISSION_GRANTED) { 
//    requestCameraPermission(); 
//    return; 
//   } 
     setUpCameraOutputs(width, height); 
     configureTransform(width, height); 
     Activity activity = mWeakParent.get(); 
     CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); 
     try { 
      if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 
       throw new RuntimeException("Time out waiting to lock camera opening."); 
      } 
      manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); 
     } catch (CameraAccessException e) { 
       e.printStackTrace(); 
     } catch (InterruptedException e) { 
      throw new RuntimeException("Interrupted while trying to lock camera opening.", e); 
     } 
    } 
+0

"私たちは、ユーザーがモーニングごとにアプリを初期化するのを忘れたくはありません" - アプリの最初の実行時にランタイムアクセス許可を1回だけ与える必要があります。 – CommonsWare

+0

私は参照してください。おそらく私はコード内の何かを変更するたびにアプリケーションを再インストールする必要があるので、私はいつも許可を参照します。いい視点ね。 – Pototo

答えて

1

あなたはその悪い習慣しかし、実行時のアクセス許可を()を使用したくない場合は、あなたがbuild.gradleファイルで、あなたのターゲットAPIを下げることができます:)私はそれを望んでいない原因

android { 
compileSdkVersion 25 
buildToolsVersion "25.0.1" 

defaultConfig { 
    applicationId "com.xaugmentedreality.arproject" 
    minSdkVersion 17 
    targetSdkVersion 22 
    versionCode 1 
    versionName "1.0" 

} 
} 

これはビルドツールを最新のバージョンに保ちますが、アプリはAPIバージョン22以下をターゲットにしています。したがって、実行時アクセス許可を使用する必要はありません。 あなたはまだ明示的にマニフェストファイルで宣言された許可を必要があると思いますが:

<uses-permission android:name="android.permission.CAMERA" /> 

PS:

私はそれが画像処理と がそうであるように、私のアプリの一つのためにこの方法を使用して行いますバージョン23を実行時アクセス許可でターゲティングすると、 MiとAsusデバイスでクラッシュし、 のAcraまたはCrashalyticsなどのレポートツールが実行される前にアプリがクラッシュすることが最も重大です。したがって これはうまくいくはずですが、お勧めのオプションではなく、 の要件で十分です。

+0

カメラ2はSDK 22で動作しますか?私はcamera2がAPI 23であると思った。 – Pototo

+0

カメラ2が** APIレベル21 ** – OBX

+0

Aightに追加された。それは意味をなさない – Pototo

関連する問題