java - 使用相机 Intent 在没有 sd 卡的情况下拍照

标签 java android camera sd-card

当没有 SD 卡时,我无法使用相机。

当有sdcard时,使用相机就很简单了,例如

http://www.vogella.com/articles/AndroidCamera/article.html + 大量其他示例。

但是,我需要让没有 SD 卡的设备(例如 Sony Xperia 系列)可以使用我的应用程序。我尝试修改代码,以便使用内部存储(我认为) :

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(getDir("myDirec", Context.MODE_WORLD_WRITEABLE), "tmp_photo_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
file.createNewFile();
mImageCaptureUri = Uri.fromFile(file);

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
intent.putExtra("return-data", true);

然而,根据结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intentReturn) {
    if (resultCode != RESULT_OK)
        return;

    String path = mImageCaptureUri.getPath();
    Bitmap bitmap = BitmapFactory.decodeFile(path);

...

位图为空。

这让我相信存在一些权限问题......也许?

我已经尝试了一些其他的内部存储选项,http://developer.android.com/guide/topics/data/data-storage.html#filesInternal例如getFilesDir() 但结果相同:null bitmap

有没有人在没有 sdcard 的情况下成功使用相机?

最佳答案

试试这个。它有效..

  private Uri imageUri;

  public void onClick(View arg0) {
    switch (arg0.getId()) {     
      case R.id.btnImageCapture:

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File dir = context.getDir("directory", Context.MODE_PRIVATE);
    File photo = new File(dir,  "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    startActivityForResult(intent, OPEN_CAMERA);
                    break;
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case OPEN_CAMERA:
        if (resultCode == Activity.RESULT_OK) {
            Uri selectedImage = imageUri;
            getContentResolver().notifyChange(selectedImage, null);
            ImageView imageView = (ImageView) findViewById(R.id.ImageView);
            ContentResolver cr = getContentResolver();
            Bitmap bitmap;
            try {
                 bitmap = android.provider.MediaStore.Images.Media
                 .getBitmap(cr, selectedImage);

                imageView.setImageBitmap(bitmap);
                Toast.makeText(this, selectedImage.toString(),
                        Toast.LENGTH_LONG).show();

            } catch (Exception e) {
                Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
                        .show();

            }
        }
    }
}

关于java - 使用相机 Intent 在没有 sd 卡的情况下拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019879/

相关文章:

java - 服务线程在启动时终止

java - 创建文件夹并存储相机拍摄的图像

android - 使用 Android 智能手机控制外部摄像头

android - 热代码替换失败

ios - 是否可以在 AVCaptureVideoDataOutput 中设置 AVCaptureSessionPresetPhoto?

java - 使用浏览器手动删除 cookie 后的请求

java - 将对象传递给 swing GUI

java - 用于与不同类型的数据库交互的数据层设计

java - java与google-app-engine通信时报错302

android - 偏好未以编程方式显示在子屏幕中