4

電話をかけている場合、カメラから写真を撮っているとき

File file = new File(getFilesDir().getAbsolutePath() + "/myImage.jpg");
Uri outputFileUri = Uri.fromFile(file);

cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

OK buttonカメラアプリは機能しておらず、何もしません(実際には、私が提供した内部メモリに保存されないため、アプリ自体は何もしません)。

しかし、私が電話した場合

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myImage.jpg");
Uri outputFileUri = Uri.fromFile(file);

cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

すべてが正常で、写真はSDカードに保存されます。

私の質問は、SDカードなしでキャプチャ写真をフル解像度で保存する方法はありますか?

4

3 に答える 3

9

ネイティブカメラアプリは、特定のアプリでのみ使用できるため、アプリのプライベート内部ディレクトリに画像を保存できません。

代わりに、カスタムカメラアクティビティを作成して画像を内部ディレクトリに保存するか、外部ストレージでストックカメラアプリを使用する必要があります。

注:カスタムカメラアクティビティを作成する場合は、少なくとも2.3以上をターゲットにするようにしてください。そのマークより下にあるものは、操作が非常に困難です。

于 2012-11-15T16:53:15.207 に答える
5

Cameraアクティビティは、ファイルをアクティビティのプライベートファイルディレクトリに保存できません。そのため、静かに失敗します。onActivityResultの外部ストレージからファイルディレクトリに画像を移動できます。

于 2012-11-15T16:52:33.227 に答える
1

許可を追加する必要があります

cameraIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

これは、ファイルプロバイダーを使用して可能です。サンプルを参照してください

  public getOutputUri(@NonNull Context pContext) {
    String photo = photo.jpeg;//your file name
    File photoFile = new File(pContext.getFilesDir(), photo);
    Uri lProviderPath = FileProvider.getUriForFile(pContext,
        pContext.getApplicationContext()
            .getPackageName() + ".provider", photoFile);
    return lProviderPath;
  }



  private void capturePhoto() {
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getOutputUri(this));
      cameraIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      startActivityForResult(cameraIntent, 1);
  }

詳細については、次のAndroidドキュメントを参照してください https://developer.android.com/reference/android/support/v4/content/FileProvider

于 2019-07-09T06:19:08.800 に答える