onActivityResult之前的Camera App崩溃 - 无错误或结果为-1且数据为空

时间:2015-01-19 22:57:48

标签: java android android-camera-intent

我正在做一个非常小的应用程序,只需按一下按钮即可启动内置摄像头应用程序。拍摄照片后,我想返回应用程序并显示照片。

下面的代码直到onActivityResult方法才能正常工作。确实创建了图像文件,并将图片保存到其中。但由于某种原因,在运行onActiveResult之前,会发生两个不同错误之一(无法找到出现错误的模式)。

有时应用程序会停止,并且logcat中没有错误。其他时候我得到例外:Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

看来返回结果代码是-1(应该是100) - 这是什么意思?此外,返回数据本身为空。为什么?

这是代码(我一直关注Androids camera app guide

package se.danielsetreus.dansetcamera1;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends Activity {
public static final int MEDIA_TYPE_IMAGE = 1;
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("DansetCamera1", "Start the app!");
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Tried adding this - but it did not help
    //super.onActivityResult(requestCode, resultCode, data);
    Log.d("Danset", "RequestCode is " + requestCode);
    Log.d("Danset", "ResultCode is " + resultCode + " Needed to be " + RESULT_OK);
    if (resultCode == RESULT_OK)
        Log.d("danset", "Image saved to \n" + data.getData());
    else if (resultCode == RESULT_CANCELED)
        Log.d("danset", "You canceled");
    else
        Log.d("danset", "Image capture failed");
}

// Create a file Uri for saving an image or video
private static Uri getOutputMediaFileUri(int type){
    Uri i =  Uri.fromFile(getOutputMediaFile(type));
    Log.d("Danset", "Created file " + i.toString());
    return i;
}

// Create a File for saving an image or video
private static File getOutputMediaFile(int type){
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "DansetCamera1");

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){ // Prepares for also handling video
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                "IMG_"+ timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}

private void startCamera(Uri uri) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

public void snapPic(View view) {
    Uri pictureFile = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
    Log.d("Danset", "Created file!");
    startCamera(pictureFile);
}
}

万分感谢您的帮助!

0 个答案:

没有答案