Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用摄像头应用程序后打开DialogFragment_Android_Android Fragments - Fatal编程技术网

在Android中使用摄像头应用程序后打开DialogFragment

在Android中使用摄像头应用程序后打开DialogFragment,android,android-fragments,Android,Android Fragments,我从我的标准android摄像头应用程序开始。一切正常,图像按我的意愿保存。在用户拍了一张照片之后(只有在那时),我想启动一个DialogFragment 我尝试使用intent并从同一个片段调用onActivityResult()。但是从未调用过activityresult() 如何在片段中启动摄影机: MyCamera camera = new MyCamera(getActivity()); camera.start(); 我是我的MyCamera班级我开始这样做: ta

我从我的标准android摄像头应用程序开始。一切正常,图像按我的意愿保存。在用户拍了一张照片之后(只有在那时),我想启动一个DialogFragment

我尝试使用intent并从同一个片段调用
onActivityResult()
。但是从未调用过activityresult()

如何在片段中启动摄影机:

    MyCamera camera = new MyCamera(getActivity());
    camera.start();
我是我的MyCamera班级我开始这样做:

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
activity.startActivityForResult(takePictureIntent, Constants.TAKE_PHOTO);
回到我在ActivityResult()上调用的片段:

我怎样才能完成这项任务?提前感谢您的帮助

下面是整个MyCamera类:

public class MyCamera {
    private Activity activity;
    private static final String TAG = "MyCamera";
    private String currentPhotoPath;
    private String currentFileName;
    private File currentFile;
    private Uri contentUri;

    public MyCamera(Activity activity) {
        this.activity = activity;
    }

    public void start() {
        dispatchPictureIntent();
        addPictureToGallery();
        currentPhotoPath = null;
    }

    private void dispatchPictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // check if device has camera
        if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {
            File photoFile = null;
            try {
                photoFile = createImageFile();
                currentPhotoPath = photoFile.getAbsolutePath();

            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(activity, R.string.msg_picture_not_saved, Toast.LENGTH_LONG).show();
            }
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                takePictureIntent.putExtra(Constants.IMAGE_FILE_NAME, currentFileName);
                activity.startActivityForResult(takePictureIntent, Constants.TAKE_PHOTO);
            }
        }
    }

    private File createImageFile() throws IOException {
        // set up storage dir
        File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        if (!storageDir.exists()) {
            if (!storageDir.mkdirs()) {
                Log.e(TAG, "failed to create directory");
                return null;
            }
        }
        // set up file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String fileName = "img_" + timeStamp + "_";
        String suffix = ".jpg";

        File image = File.createTempFile(fileName, suffix, storageDir);
        currentFileName = image.getName();
        currentFile = image;
        return image;
    }

    private void addPictureToGallery() {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        contentUri = getUri(currentPhotoPath);
        mediaScanIntent.setData(contentUri);
        activity.sendBroadcast(mediaScanIntent);
    }

    private Uri getUri(String currentPhotoPath) {
        File f = new File(currentPhotoPath);
        return Uri.fromFile(f);
    }
}
我尝试使用intent并从同一个片段调用onActivityResult()。但是onActivityResult()永远不会被调用

这是因为您在
活动
上调用的是
startActivityForResult()
,而不是在片段上。您的
onActivityResult()
方法在调用
startActivityForResult()的对象上运行。因此,如果希望片段具有
onActivityResult()
,请在片段上调用
startActivityForResult()

我尝试使用intent并从同一个片段调用onActivityResult()。但是onActivityResult()永远不会被调用

这是因为您在
活动
上调用的是
startActivityForResult()
,而不是在片段上。您的
onActivityResult()
方法在调用
startActivityForResult()的对象上运行。因此,如果您希望片段具有
onActivityResult()
,请在片段上调用
startActivityForResult()

基于本文:

尝试添加您的托管活动

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
 }
它将允许将未处理的活动结果传递给您的片段

另外,请确保根据以下帖子调用
fragment.startActivityForResult()
,而不是
activity.startActivityForResult()

尝试添加您的托管活动

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
 }
它将允许将未处理的活动结果传递给您的片段


另外,请确保调用
fragment.startActivityForResult()
而不是
activity.startActivityForResult()

这是因为您的片段从未在onActivityResult()中获得结果。您必须根据本文修改您的活动:这是因为您的片段从未在onActivityResult()中得到结果。你必须根据这篇文章相应地修改你的活动:我现在在片段上调用它,并调用
onActivityResult()
。非常感谢。但不知何故,onActivityResult()中的数据意图为空。。。你知道为什么吗?我将数据放在如下意图中:
takePictureContent.putExtra(MediaStore.EXTRA_输出,Uri.fromFile(photoFile));takePictureContent.putExtra(常量.IMAGE\u文件名,当前文件名);fragment.startActivityForResult(takePictureIntent,Constants.TAKE_PHOTO)
@HansiHansenbaum:“但不知何故,onActivityResult()中的数据意图是空的……你知道为什么吗?”--它应该是
null
。你知道图像应该在哪里(
photoFile
)。很抱歉问了这些愚蠢的问题。但是如何将一个字符串从intent传递到onActivityResult()?@HansiHansenbaum:在片段的一个字段中保留它,您已经在该字段上实现了
onActivityResult()
。我必须声明属性final,因为片段当然是在拍照后重建的。这不是很漂亮,但很管用。谢谢你的帮助!我现在在片段上调用它,调用了
onActivityResult()
。非常感谢。但不知何故,onActivityResult()中的数据意图为空。。。你知道为什么吗?我将数据放在如下意图中:
takePictureContent.putExtra(MediaStore.EXTRA_输出,Uri.fromFile(photoFile));takePictureContent.putExtra(常量.IMAGE\u文件名,当前文件名);fragment.startActivityForResult(takePictureIntent,Constants.TAKE_PHOTO)
@HansiHansenbaum:“但不知何故,onActivityResult()中的数据意图是空的……你知道为什么吗?”--它应该是
null
。你知道图像应该在哪里(
photoFile
)。很抱歉问了这些愚蠢的问题。但是如何将一个字符串从intent传递到onActivityResult()?@HansiHansenbaum:在片段的一个字段中保留它,您已经在该字段上实现了
onActivityResult()
。我必须声明属性final,因为片段当然是在拍照后重建的。这不是很漂亮,但很管用。谢谢你的帮助!