java - android - 如何使用相机从 sd 卡获取图像

标签 java android android-camera

我在那个应用程序中实现了一个应用程序,一个按钮就在那里。如果你点击那个按钮,相机就会打开,你可以用它来捕捉一些东西。捕获的图像将显示在应用中。

但现在我想再添加一个按钮。如果你点击它然后它会在 GridView 中显示 sdcard 中的所有图像(相机相关图像)。如果你选择任何图像然后它将显示在应用程序中。

谁能建议我如何实现它。

还有一件事。在这段代码中

Bitmap thumbnail = (Bitmap) data.getExtras().get("data");  

这里的“数据”是什么意思?

代码:

public class camera extends Activity 
    {

Button camera_btn;
ImageView cap_image;
public static final int CAMERA_PIC_REQUEST = 1;  

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    camera_btn = (Button) findViewById(R.id.camera_btn);
    camera_btn.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

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

    });

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{  
    if (requestCode == CAMERA_PIC_REQUEST)
    {  
        if(data != null)
        {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");  
            cap_image = (ImageView) findViewById(R.id.cap_image);
            cap_image.setImageBitmap(thumbnail); 
        }
        else
        {
            System.out.println("Please capature the photo");
        }

    }  
}  
}

异常: 10-20 13:06:35.073: WARN/System.err(5391): java.lang.IllegalArgumentException: id 10020 的对话框从未通过 Activity#showDialog 显示

10-20 13:06:35.073: WARN/System.err(5391): 在 android.app.Activity.missingDialog(Activity.java:2747)

10-20 13:06:35.073: WARN/System.err(5391): 在 android.app.Activity.dismissDialog(Activity.java:2732)

10-20 13:06:35.083: WARN/System.err(5391): 在 com.htc.album.TabPluginDevice.ActivityGlanceBase.handleActivityMessage(ActivityGlanceBase.java:161)

10-20 13:06:35.083: WARN/System.err(5391): 在 com.htc.opensense.album.TemplateActivityBase$ActivityHandler.handleMessage(TemplateActivityBase.java:89) 10-20 13:06:35.083: WARN/System.err(5391): 在 android.os.Handler.dispatchMessage(Handler.java:99)

10-20 13:06:35.083: WARN/System.err(5391): 在 android.os.Looper.loop(Looper.java:143)

10-20 13:06:35.083: WARN/System.err(5391): 在 android.app.ActivityThread.main(ActivityThread.java:4277)

10-20 13:06:35.093: WARN/System.err(5391): 在 java.lang.reflect.Method.invokeNative(本地方法)

10-20 13:06:35.093: WARN/System.err(5391): 在 java.lang.reflect.Method.invoke(Method.java:507)

10-20 13:06:35.093: WARN/System.err(5391): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

10-20 13:06:35.093: WARN/System.err(5391): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

10-20 13:06:35.093: WARN/System.err(5391): 在 dalvik.system.NativeStart.main(Native Method)

10-20 13:06:38.523:INFO/LogFilter(726):找不到强制性“主机”HTTP header 。

最佳答案

    camera_btn.setOnClickListener(new OnClickListener(){ 

        @Override 
        public void onClick(View v) { 

            Intent cameraIntent = new Intent(Intent.ACTION_GET_CONTENT);
            cameraIntent.setType("image/*");
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  
        } 

    }); 

protected void onActivityResult(int requestCode, int resultCode, Intent data)  
{   
    if (requestCode == CAMERA_PIC_REQUEST && resultCode==Activity.RESULT_OK) 
    {   
        if(data != null) 
        { 
        Uri contentUri = data.getData();
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String tmppath = cursor.getString(column_index);
        Bitmap bmp = BitmapFactory.decodeFile(tmppath);            } 
        else 
        { 
            System.out.println("Please capature the photo"); 
        } 

    }   
}   

Here "data" means what?

没有太多概念性知识,但您可以将数据视为您为结果而开始的 Activity 的输出。在您的案例中是图像。也可以是视频或其他任何内容,具体取决于您开始的 Activity 哪个 Action 。

关于java - android - 如何使用相机从 sd 卡获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7832327/

相关文章:

android - 三星 Galaxy SIII 的相机是否存在缺陷?

Android Canvas 在相机上画线

java - LWJGL 中的平铺引擎

java - 在 JTable 中自动添加一些文本

java - setAlpha 以编程方式查看

java - 按后退按钮移至上一个 fragment 时显示空白屏幕

android - Android 上的 Python 3.3.2+

java - 无法使用@IdClass 转换实体中的请求元素

android - C2DM : does Google enforce 1-to-1 between apps and sender accounts?

java - 为什么我得到 result.get(CaptureResult.CONTROL_AF_STATE); == 无效?