简体   繁体   English

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

[英]android - How to get the images from sd card using camera

I implemented one application in that application one button is there. 我在那个应用程序中实现了一个应用程序,那里有一个按钮。 if you click on that button then camera will be opened using that u can capture some thing. 如果您单击该按钮,则会使用您可以捕捉到的东西打开相机。 That captured image will be displayed in the app. 捕获的图像将显示在应用程序中。

But now i want to add one more button. 但是现在我想再添加一个按钮。 if you click on that then it displays all images in the sdcard(camera related images) in grid view.if you select any image then it will be displayed in the app. 如果单击该按钮,它将在网格视图中显示sdcard(与相机相关的图像)中的所有图像。如果您选择任何图像,它将显示在应用程序中。

Please can any one suggest me how to implement it. 请任何人能建议我如何实施它。

And one more thing. 还有一件事。 In this code 在这段代码中

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

Here "data" means what? 这里的“数据”是什么意思?

Code: 码:

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");
        }

    }  
}  
}

Exception: 10-20 13:06:35.073: WARN/System.err(5391): java.lang.IllegalArgumentException: no dialog with id 10020 was ever shown via Activity#showDialog 异常: 10-20 13:06:35.073:WARN / System.err(5391):java.lang.IllegalArgumentException:从未通过Activity#showDialog显示ID为10020的对话框

10-20 13:06:35.073: WARN/System.err(5391): at android.app.Activity.missingDialog(Activity.java:2747) 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): at android.app.Activity.dismissDialog(Activity.java:2732) 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): at com.htc.album.TabPluginDevice.ActivityGlanceBase.handleActivityMessage(ActivityGlanceBase.java:161) 10-20 13:06:35.083:WARN / System.err(5391):at com.htc.album.TabPluginDevice.ActivityGlanceBase.handleActivityMessage(ActivityGlanceBase.java:161)

10-20 13:06:35.083: WARN/System.err(5391): at com.htc.opensense.album.TemplateActivityBase$ActivityHandler.handleMessage(TemplateActivityBase.java:89) 10-20 13:06:35.083: WARN/System.err(5391): at android.os.Handler.dispatchMessage(Handler.java:99) 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): at android.os.Looper.loop(Looper.java:143) 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): at android.app.ActivityThread.main(ActivityThread.java:4277) 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): at java.lang.reflect.Method.invokeNative(Native Method) 10-20 13:06:35.093:WARN / System.err(5391):at java.lang.reflect.Method.invokeNative(本机方法)

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

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

10-20 13:06:35.093: WARN/System.err(5391): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 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): at dalvik.system.NativeStart.main(Native Method) 10-20 13:06:35.093:WARN / System.err(5391):at dalvik.system.NativeStart.main(本机方法)

10-20 13:06:38.523: INFO/LogFilter(726): Couldn't find the mandatory "Host" HTTP header. 10-20 13:06:38.523:INFO / LogFilter(726):无法找到必需的“主机” HTTP标头。

    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);  
        } 

    }); 

and

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"); 
        } 

    }   
}   

and

Here "data" means what?

Dont have much conceptual knowledge, but you can consider data as the output of the activity that you have started for result..that is image in your case..also can be video or anything else depends upon what activity you started with which action. 没有太多的概念知识,但是您可以将数据视为已开始进行结果的活动的输出。在您的情况下,这是图像。也可以是视频,或者其他取决于您以什么动作开始的活动。

@Frankenstein: Entire process is right except the following code @Frankenstein:整个过程是正确的,除了以下代码

Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 位图缩略图=(位图)data.getExtras()。get(“ data”);

Instead of this, do the following process 代替此,执行以下过程

  1. Get the URI from the intent. 从意图中获取URI。

    Uri selectedImageUri = data.getData(); Uri selectedImageUri = data.getData();

  2. Get the path from the URI 从URI获取路径

    String filestring = selectedImageUri.getPath(); 字符串filestring = selectedImageUri.getPath();

  3. Get the bitmap using the getThumbnail (ContentResolver cr, long origId, int kind, BitmapFactory.Options options) method . 使用getThumbnail(ContentResolver cr,long origId,int kind,BitmapFactory.Options选项)方法获取位图

Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(), selectedImageUriId, MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null); 位图缩略图= MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(),selectedImageUriId,MediaStore.Images.Thumbnails.MINI_KIND,(BitmapFactory.Options)null);

Here getContentResolver() ---->Return a ContentResolver instance for your application's package. 在这里, getContentResolver() ---->返回应用程序包的ContentResolver实例。 selectedImageUriId ---->ID of the selected Thumbnail. selectedImageUriId ---->所选缩略图的ID。 This will be getting from the path. 这将从道路上得到。

Ex: Path: /external/images/media/5 Here "5" is the ID of the selected image. 例如:路径:/ external / images / media / 5这里的“ 5”是所选图像的ID。 This "5" is getting from the path using string operations. 使用字符串操作从路径获取“ 5”。

Finally the following code instead of the 最后下面的代码代替

Code

//Get the URI from the Intent //从意图中获取URI

Uri selectedImageUri = data.getData(); Uri selectedImageUri = data.getData();

//Get the decoded path from the URI //从URI获取解码路径

String filestring = selectedImageUri.getPath(); 字符串filestring = selectedImageUri.getPath();

//Get the ID from the path. //从路径获取ID。 String x = filestring.substring(23); 字符串x = filestring.substring(23);

long selectedImageUriId = Long.parseLong(x); long selectedImageUriId = Long.parseLong(x);

//Get the bitmap //获取位图

Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(), selectedImageUriId, MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null); 位图缩略图= MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(),selectedImageUriId,MediaStore.Images.Thumbnails.MINI_KIND,(BitmapFactory.Options)null);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM