【问题标题】:Android Launching Camera Intent from FragmentAndroid从片段启动相机意图
【发布时间】:2013-11-28 18:05:11
【问题描述】:

我目前有一个承载多个片段的活动,并且我在集合的第三个片段上。

在那个片段中,我使用一个 Intent 来启动相机或画廊。见代码:

public Intent getImageIntent() {

    // Camera.
    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    final PackageManager packageManager = context.getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for (ResolveInfo res : listCam) {
        final String packageName = res.activityInfo.packageName;
        final Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(res.activityInfo.packageName,
                res.activityInfo.name));
        intent.setPackage(packageName);
        cameraIntents.add(intent);
    }

    // Filesystem.
    final Intent galleryIntent = new Intent();
    galleryIntent.setType("image/*");
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

    // Chooser of filesystem options.
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

    // Add the camera options.
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
            cameraIntents.toArray(new Parcelable[] {}));

    // Calling activity should exeecute:
    // startActivityForResult(chooserIntent, 1);
    return chooserIntent;
}

onActivityResult 执行之后:

private void handleSmallCameraPhoto(Intent intent) {
    Bundle extras = intent.getExtras();
    mProductBitmap = (Bitmap) extras.get("data");
    imgProduct.setImageBitmap(mProductBitmap);
}

其中 mProductBitmap 是位图全局变量,imgProduct 是已初始化的 ImageView。

出于某种原因,首先:Camera 选项强制关闭应用程序,并从实际片段本身获取空指针,就像片段项目再次全部为空一样。 第二:图库选项(超过一个)不会出错,但也不显示图像。

任何帮助将不胜感激。我已经查看了所有可能的响应,但没有多少人从不是活动托管的初始片段的片段中调用意图。 谢谢!

编辑: 有时在 onActivityResult 之后发现我的上下文为空。如果有人遇到此帮助,我们将不胜感激。谢谢。

编辑:下面是 onActivityResult 方法,大多数时候第一个 if 应该被执行。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    if (resultCode == Activity.RESULT_OK) {
        handleSmallCameraPhoto(intent);
    } else {
        if (requestCode == 1) {
            InputStream stream = null;
            if (intent == null) {
                System.out.println("DATA IS NULL..");
            } else {
                try {
                    if (mProductBitmap != null) {
                        mProductBitmap.recycle();
                    }
                    stream = getActivity().getContentResolver().openInputStream(
                            intent.getData());
                    mProductBitmap = BitmapFactory.decodeStream(stream);
                    System.out.println(mProductBitmap);
                    System.out.println("Setting image result");
                    imgProduct.setImageBitmap(mProductBitmap);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    if (stream != null)
                        try {
                            stream.close();
                        } catch (IOException e2) {
                            e2.printStackTrace();
                        }
                }
            }
        }
    }

}

【问题讨论】:

  • 你在 Fragment 的哪里初始化上下文?
  • 你能在你做startActivityForResult(...)的地方显示代码吗?
  • @GopalRao 片段中的上下文是从它的活动中获取的,所以在这个实例中,我使用了一个 CameraImage 对象并在构造它时初始化了上下文。
  • @yurezcv 我用这个方法编辑了我最初的问题。希望对您有所帮助,但不需要太多。
  • 你解决了这个问题吗?我有同样的问题

标签: java android eclipse android-intent android-fragments


【解决方案1】:

您的照片保存在PATH_TO_SAVE 位置。

你应该在onActivityResult 做这样的事情:

File file = new File(PATH_TO_SAVE);
Bitmap bmp = BitmapFactory.decodeFile(file.getPath());

【讨论】:

  • 我目前已经放弃了这个功能,稍后会回到它。我会接受这个答案,因为这似乎是我所缺少的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多