9
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    filePath = getOutputMediaFile(FileColumns.MEDIA_TYPE_IMAGE);
    File file = new File(filePath);
    Uri output = Uri.fromFile(file);
    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    i.putExtra(MediaStore.EXTRA_OUTPUT, output);
    startActivityForResult(i, RETURN_FILE_PATH);
}

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //data is always null here.
    //requestCode = RETURN_FILE_PATH;
    //resultCode = Activity.RESULT_OK;
}

fileoutput Uriの値を確認しましたが、どちらも問題なく、キャプチャされた画像は実際にその場所に存在します

ただし、返されるデータonActivityResultは常にnull画像をキャプチャした後でもあります。

編集:

私はこの質問をチェックしました:

onActivityResult が data = null で返される

それは言う:

カメラ インテントを指定して EXTRAOUTPUT を渡して画像を保存すると、onActivityResult 内のデータ パラメータは常に null を返します。したがって、データを使用して画像を取得する代わりに、ファイルパスを使用してビットマップを取得します。

そして多分その解決策は私にとってうまくいくでしょう。しかし、私の上記のコードは、これまで同じシナリオで機能するコードでした。

4

5 に答える 5

1

次のコードを試してください

        {
            final String[] imageColumns = { MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA };

            final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
            Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
            imageCursor.moveToFirst();
            do {
                String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
                if (fullPath.contains("DCIM")) {

                    //get bitmap from fullpath here.
                    return;
                }
            }
            while (imageCursor.moveToNext());
于 2015-09-03T07:57:30.253 に答える
0

このコードを onActivityResult に入れるだけです。一部のデバイスで直面したのと同じ問題があり、これで問題が解決しました。これも役立つことを願っています。

try {

    Uri selectedImage = output;

    if (selectedImage == null)
        return;

    String[] filePathColumn = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();

} catch (Exception e) {
    return;
}     

picturePath変数でピクチャ パスを取得し、selectedImage変数で Uriを取得します。

于 2013-07-24T09:04:54.567 に答える
0

マニフェストでアクティビティの launchmode が singleInstance になっている場合、この問題に直面します。変更してみてください。毎回結果をキャンセルします。

于 2016-07-04T16:43:13.410 に答える