相机与不同的移动设备

时间:2014-10-13 06:17:06

标签: android

我在不同设备上打开相机意图时遇到问题。

我可以在没有问题的情况下启动我在小米设备上编写的应用程序,但在其他设备上启动应用程序时,存在问题。

这是我的代码。抱歉,没有要显示的日志文件。

private void startCamera() {
    // 使用android內建api
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    Case = 10; // camera
    // 檔案名稱使用時間來記錄
    SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    date = sDateFormat.format(new java.util.Date());
    // 強制轉型.jpg
    date = date + ".jpg";
    // 檔案存放地方 還有檔案名稱
    tmpFile = new File(Environment.getExternalStorageDirectory()
            + "/DCIM/100ANDRO", date);
    imageUri = Uri.fromFile(tmpFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
            .parse("file://" + tmpFile)));
    startActivityForResult(intent, 2);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    /**
     * Camera
     */
    if (resultCode == RESULT_OK && requestCode == 2) {
        // 利用BitmapFactory去取得剛拍照的圖像
        // 檔案名稱使用時間來記錄
        Bitmap bmp = BitmapFactory.decodeFile(imageUri.getPath());
        imageView1.setImageBitmap(bmp);
    }
    super.onActivityResult(requestCode, resultCode, data);
}

我不知道这个错误在哪里。

2 个答案:

答案 0 :(得分:0)

如果您的应用无法打开相机,可能需要安装相机应用以响应意图。

这是您的代码中的另一个严重问题。您可以直接从相机加载图像。

这是你的代码:位图bmp = BitmapFactory.decodeFile(imageUri.getPath());

通常情况下图片太大而无法进行缩放。这会导致 OOM异常。如果你的应用是 因OOM异常而崩溃。请尝试以下方法:

public static Bitmap getScaledBitmap(Activity a, String path) {
    Display display = a.getWindowManager().getDefaultDisplay();
    float destWidth = display.getWidth();
    float destHeight = display.getHeight();

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    float srcWidth = options.outWidth;
    float srcHeight = options.outHeight;

    int inSampleSize = 1;
    if (srcHeight > destHeight || srcWidth > destWidth) {
        if (srcWidth > srcHeight) {
            inSampleSize = Math.round(srcHeight / destHeight);
        } else {
            inSampleSize = Math.round(srcWidth / destWidth);
        }
    }

    options = new BitmapFactory.Options();
    options.inSampleSize = inSampleSize;

    Bitmap bitmap = BitmapFactory.decodeFile(path, options);
    return bitmap ;
}

位图bmp = getScaledBitmap(YourActivity,imageUri.getPath());

答案 1 :(得分:0)

private void startCamera() { // 使用android內建api Intent intent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Case = 10; // camera // 檔案名稱使用時間來記錄 SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); date = sDateFormat.format(new java.util.Date()); // 強制轉型.jpg date = date + ".jpg"; // 檔案存放地方 還有檔案名稱 tmpFile = new File(Environment.getExternalStorageDirectory() + "/DCIM/100ANDRO", date); imageUri = Uri.fromFile(tmpFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri // .parse("file://" + tmpFile))); startActivityForResult(intent, 2);