2017-04-21 7 views
2

Google Vision FaceTrackerを実行しようとしていますが、CameraSourcePreviewのコードの1行にエラーがあります。GoogleのVisionAPIの例FaceTrackerカメラの権限

これはエラーある - コールは、ユーザーによって拒否することができる権限が必要です。コードは、明示的に許可が潜在的なSecurityException

を処理可能な(checkPermission付き)または明示的であり、これがあるかどうかを確認する必要があります

private void startIfReady() throws IOException { 
    if (mStartRequested && mSurfaceAvailable) { 

     mCameraSource.start(mSurfaceView.getHolder()); //Error 

     //...other code 

     mStartRequested = false; 
    } 
} 
+0

こんにちは。 FaceTrackerが必要とするアクセス権を見てから、int permission = checkPermission(mContext、Manifest.permission.WRITE_EXTERNAL_STORAGE);を実行して要求してください。 (私の例はファイル書き込みのためのもので、おそらく他のもののためのものです)。チェックパーミッションメソッドは次のようになります。int permissionResult = ActivityCompat.checkSelfPermission(context、permission); – Smashing

+0

ありがとう!問題を修正しましたが、アプリを実行すると部分的に黒い画面が表示されます:( – Kek

+0

カメラの許可もチェックしましたか? –

答えて

0

機能 - あなたがFaceTrackerが必要適切なアクセス権を取得されていませんように見えるん。必要に応じて、以下の実装とインターフェイスにfacetracker権限を追加するだけです。我々のアプリで

私たちは私たちのために私たちのすべての権限を処理するコールバックとのインタフェースを追加しました:

public interface PermissionAndPackageAvailabilityChecker { 

    void checkCameraPermission(final PermissionResult callback); 

    void checkFileIoPermission(final PermissionResult callback); 

    interface PermissionResult { 
     void hasPermission(); 

     void noPermission(); 
    } 
} 

実装は非常に単純です:

public class DefaultPermissionAndPackage implements PermissionAndPackageAvailabilityChecker { 

    private final Context mContext; 

    @Inject 
    public DefaultPermissionAndPackage(Context context) { 
     mContext = context; 
    } 

    @Override 
    public void checkCameraPermission(final PermissionResult callback) { 
     int cameraPermission = checkPermission(mContext, Manifest.permission.CAMERA); 
     if (checkHasPermission(cameraPermission)) { 
      callback.hasPermission(); 
     } else { 
      callback.noPermission(); 
     } 
    } 

    @Override 
    public void checkFileIoPermission(PermissionResult callback) { 
     // Check if we have write permission 
     int permission = checkPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     if (checkHasPermission(permission)) { 
      callback.hasPermission(); 
     } else { 
      callback.noPermission(); 
     } 
    } 

    private int getTargetSdk(int defaultVersion) { 
     int targetSdkVersion = defaultVersion; 
     try { 
      PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0); 
      targetSdkVersion = packageInfo.applicationInfo.targetSdkVersion; 

     } catch (PackageManager.NameNotFoundException ignored) { 
      //Should not happen . . . I hope 
     } 
     return targetSdkVersion; 
    } 

    private int checkPermission(final Context context, final String permission) { 
     int permissionResult = ActivityCompat.checkSelfPermission(context, permission); 
     // this can probably be simplified but explains the logic around permissions nicely. 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1 
       && getTargetSdk(Build.VERSION_CODES.LOLLIPOP_MR1) <= Build.VERSION_CODES.LOLLIPOP_MR1) { 
      permissionResult = PermissionChecker.checkSelfPermission(context, permission); 
      //Will check marshmallow here in the future 
     } 
     return permissionResult; 
    } 

    private boolean checkHasPermission(int permissionToCheck) { 
     return permissionToCheck == PackageManager.PERMISSION_GRANTED; 
    } 
} 
関連する問題