【问题标题】:How can I use the camera in Droid X by Android application如何通过 Android 应用程序在 Droid X 中使用相机
【发布时间】:2011-08-11 05:16:01
【问题描述】:

在我的两到三个应用程序中,我必须使用应用程序中的相机活动。用户使用相机拍摄照片并将该图像设置在图像视图上。

它适用于除 Droid X 之外的所有设备。当用户从 Droid X 手机拍照时,应用程序被强制关闭。

这是我启动相机活动的代码:

public void startCameraActivity()
{
    _path = Environment.getExternalStorageDirectory() + "/default.jpg";
    File file = new File( _path );
    Uri outputFileUri = Uri.fromFile( file );

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
    startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_PIC_REQUEST) {  
        _taken = true;

        bita = BitmapFactory.decodeFile( _path);
        imv.setImageBitmap(bita);
    }  
}        

那么我应该怎么做才能在 Droid X 中成功运行相机活动?我无法找到问题所在。

【问题讨论】:

  • 您的问题是由于位图造成的内存不足。根据它进行搜索。
  • 您对此有什么解决方案吗...如果您有任何解决方案,请帮助我..
  • 搜索位图回收。你会发现如何回收和空位图。你必须相应地去做。解释起来有点复杂。根据内存不足做一些研究。
  • “强制关闭”总是伴随着 logcat 中的异常堆栈跟踪,以了解导致实际问题的原因。您在这里对导致崩溃的原因有不同的看法,发布您看到的确切 logcat 堆栈跟踪将使人们就问题达成一致并提供正确的解决方案。

标签: android


【解决方案1】:

这里的问题不是内存问题,因为 Andro 对此以及其他类似帖子发表了评论。

问题只是与 Droid X 相机意图与其他设备的不同之处有关。

在我的情况下,当我尝试获取我使用“intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);”传递给相机的指定 URI 时,我收到了 NullPointerException。一些设备摄像头不能很好地接受这个额外的,这些情况需要单独处理。 (请参阅接受的答案here)。

在我的例子中,运行 2.3.3 的 Droid X,返回的意图也是空的。我的调试器会在相机意图期间分离,这表明有一些超出我控制范围的错误。我能做的最好的就是遵循公认的答案here

所以我添加了一个捕获,用于当我想要的 imageUri 为 null 时,并且由于我返回的 intent 为 null,我添加了获取最近拍摄的照片的逻辑(以 this 为例)。

if ( imageUri == null ) {

   String[] projection = new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, MediaStore.Images.ImageColumns.DATE_TAKEN, MediaStore.Images.ImageColumns.MIME_TYPE };
   final Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC" );
   int column_index = cursor.getColumnIndexOrThrow( MediaStore.Images.Media.DATA );
   cursor.moveToFirst();
   fileUri = cursor.getString( column_index );
}

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-20
    • 2015-07-31
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多