相关疑难解决方法(0)

Android上的相机示例

我想写一个活动:

  1. 显示相机预览(取景器),并具有"捕获"按钮.
  2. 按下"捕获"按钮时,拍摄照片并将其返回到调用活动(setResult()&finish()).

是否有适用于每台设备的完整示例?链接到一个简单的开源应用程序拍照将是理想的答案.


我的研究到目前为止:

这是一个常见的场景,有很多问题和教程.

主要有两种方法:

  1. 使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE事件.看到这个问题
  2. 直接使用Camera API.请参阅此示例此问题(包含大量参考).

方法1本来是完美的,但问题是每个设备上的意图实现不同. 在某些设备上它运作良好.但是,在某些设备上,您可以拍照,但它永远不会返回到您的应用.在某些设备上,启动意图时没有任何反应.通常它还将图像保存到SD卡,并且需要存在SD卡.每个设备上的用户交互也不同.

方法2的问题是稳定性.我尝试了一些例子,但我设法阻止相机在某些设备上工作(直到重启)并完全冻结另一台设备.在另一台设备上捕捉工作,但预览保持黑色.

我会使用ZXing作为示例应用程序(我经常使用它),但它只使用预览(取景器),并且不拍任何照片.我还发现,在某些设备上,ZXing在光照条件改变时没有自动调整白平衡,而原生相机应用程序正确地做到了(不确定是否可以修复).


更新:

有一段时间我直接使用了相机API.这提供了更多控制(自定义UI等),但我不建议任何人.我会在90%的设备上工作,但是每次都会发布一个新的设备,但是会遇到不同的问题.

我遇到的一些问题:

  • 处理自动对焦
  • 处理闪光灯
  • 带前置摄像头,后置摄像头或两者的支持设备
  • 每个设备都有不同的屏幕分辨率,预览分辨率(并不总是与屏幕分辨率匹配)和图像分辨率的组合.

所以一般来说,除非没有别的办法,否则我不建议去这条路线.两年后,我通过自定义代码转储并切换回基于Intent的方法.从那时起,我的麻烦就少了很多.我过去在基于意图的方法中遇到的问题可能只是我自己的无能.

如果你真的需要走这条路,我听说如果你只支持Android 4.0+的设备会更容易.

camera android android-camera android-camera-intent

19
推荐指数
1
解决办法
4万
查看次数

相机意图返回小图片

我正在使用相机意图拍摄照片.这是我的代码,效果很好:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

我的onActivityResult看起来像这样:

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
    if (resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap photo = (Bitmap) extras.get("data");
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,虽然相机拍摄的照片是480*800(我正在使用HTC Desire),但返回的位图只有194*324!

知道为什么会这样,以及如何解决它?

谢谢!

android bitmap android-intent android-camera

14
推荐指数
1
解决办法
1万
查看次数

将照片保存到文件时出现问题

伙计,当我发送要求拍摄照片的意图时,我仍然无法保存图片.这就是我在做的事情:

  1. 创建一个表示路径名的URI

    android.content.Context c = getApplicationContext(); 
    
    String fname = c.getFilesDir().getAbsolutePath()+"/parked.jpg";
    
    java.io.File file = new java.io.File( fname ); 
    
    Uri fileUri = Uri.fromFile(file);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建Intent(不要忘记pkg名称!)并启动活动

    private static int TAKE_PICTURE = 22;
    
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
    
    intent.putExtra("com.droidstogo.boom1." + MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult( intent, TAKE_PICTURE );
    
    Run Code Online (Sandbox Code Playgroud)
  3. 相机活动开始,我可以拍照,并批准它.我onActivityResult()被召唤了.但我的文件没有写.URI为:file:///data/data/com.droidstogo.boom1/files/parked.jpg

  4. 我可以创建缩略图OK(通过不将额外的内容放入Intent),并且可以将该文件写入OK,然后再将其读回来).

任何人都可以看到我犯的是什么简单的错误?在logcat中没有任何明显的东西 - 相机显然正在拍照.谢谢,

彼得


我应该提一下,我在AndroidManifest.xml文件中设置了相应的权限:

    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />

    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-library android:name="com.google.android.maps" />



</application>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?关于要尝试的事情的任何想法,以获得有关该问题的更多信息?

camera android image file save

8
推荐指数
2
解决办法
2万
查看次数

使用手机摄像头,捕获图像活动后不会返回特定活动

我正在使用手机的相机并使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE从我的应用程序中捕获图像.

单击捕获按钮后,它会显示保存或丢弃.单击保存按钮,它将返回相机而不是应用程序.并且图像保存在gallary中而不是我声明的输出文件中.

以下是我的代码

    @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Intent in=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(in, 0);

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK) {
    Bitmap bm=(Bitmap) data.getExtras().get("data");
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

    //you can create a new file name "test.jpg" in sdcard folder.
    File f = new File(Environment.getExternalStorageDirectory()
                            + File.separator + "player1.jpg");
    try {
        f.createNewFile();
    } catch (IOException e) …
Run Code Online (Sandbox Code Playgroud)

camera android

5
推荐指数
1
解决办法
2038
查看次数

如何更改相机保存路径?

使用默认相机应用程序的照片和视频保存在SD卡上.

我真的需要知道是否有方法(简单或困难)更改路径,以便我可以将这些文件保存在内部存储器中.

或者,如果您知道来自Android市场的另一个相机应用程序,可以选择更改路径.

我不需要SD卡解决方案.

java mobile android android-camera

2
推荐指数
1
解决办法
4723
查看次数