1

私は最初のAndroidアプリを開発しており、カメラアプリを起動して写真を撮り、写真のUriでアプリケーションに戻るインテントを作成しようとしています.

次のコードを使用すると、うまく機能しますが、低品質の写真しか撮れません。

    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, RESULT_TAKE_PICTURE);

写真を高品質で保存するためにファイル ディレクトリを定義しようとすると、カメラ アプリケーションの [OK] ボタンが機能せず、写真が保存されません。エラー メッセージはまったく表示されません。私の推測では、アプリは私が提供するディレクトリに書き込むことができないだけですが、その理由と何をすべきかわかりません...

コードは次のとおりです。

    File file = new File(
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
            imageFileName);
    imageUri = Uri.fromFile(file);

    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, RESULT_TAKE_PICTURE);

そして私の許可:

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

3 に答える 3

0

問題には 2 つの異なる原因があったようです。1 つ目は、エミュレータが外部ストレージにアクセスできないように見えたことです。デバイスの内部および外部メモリのサイズを減らすことで、何とか修正しました。

2番目の問題は、私の写真の名前から来ました。実際、次の方法を使用して名前を生成しました。

    String timeStamp = SimpleDateFormat.getDateTimeInstance().format(new Date());
    String imageFileName = "picture_" + timeStamp + ".jpg";

これにより、「:」文字を含む名前が生成され、カメラがファイルを作成できなくなりました。私はそれを次のものに置き換えました:

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss");                    
    String timeStamp = dateFormat.format(new Date());
    String imageFileName = "picture_" + timeStamp + ".jpg";

そして今、すべてが正常に動作します! :)

于 2013-01-13T23:46:59.140 に答える
0

この行

 intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

間違っている。カメラを起動する意図は次のようになります

 Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");  

この行を追加して完了です。

Android アプリケーションでカメラを使用するには、マニフェストにこれらの 2 行を追加したことを確認してください。

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

それが役立つことを願っています。

于 2013-01-12T06:49:06.717 に答える
0

私のアプローチは少し異なりますが、このコードが役立つかどうかを確認してください。私のアプリでは問題なく機能します。

Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE");

File cameraFolder;

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
    cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),"your_folder_name");
else
    cameraFolder= StatusUpdate.this.getCacheDir();
if(!cameraFolder.exists())
    cameraFolder.mkdirs();

File photo = new File(Environment.getExternalStorageDirectory(), "your_folder_name/camera_snap.jpg");
getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
Uri initialURI = Uri.fromFile(photo);

startActivityForResult(getCameraImage, reqcdCameraImage);

これにより、指定されたフォルダーにcamera_snap.jpgという名前と拡張子を持つ画像が保存され、おそらくで表示できるように、 Uri initialURIにも同じものがキャストされます。ImageView

于 2013-01-12T07:21:40.457 に答える