Android - Как получить изображения с SD-карты с помощью камеры - PullRequest
1 голос
/ 20 октября 2011

Я реализовал одно приложение в этом приложении, там есть одна кнопка.Если вы нажмете на эту кнопку, камера будет открыта, и вы сможете запечатлеть что-то.Это захваченное изображение будет отображаться в приложении.

Но теперь я хочу добавить еще одну кнопку.если вы нажмете на нее, то все изображения на SD-карте (изображения, связанные с камерой) отобразятся в виде сетки. Если вы выберете любое изображение, оно будет отображаться в приложении.

Пожалуйста, кто-нибудь может подсказать мне, как это реализовать.

И еще одна вещь.В этом коде

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: диалог с идентификатором 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.ошибка (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-2013: 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): at 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): на ком.android.internal.os.ZygoteInit.main (ZygoteInit.java:597)

10-20 13: 06: 35.093: WARN / System.err (5391): в dalvik.system.NativeStart.main (NativeМетод)

10-20 13: 06: 38.523: INFO / LogFilter (726): не удалось найти обязательный HTTP-заголовок "Host".

Ответы [ 2 ]

1 голос
/ 20 октября 2011
    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?

Не имею много концептуальных знаний, но вы можете рассматривать данные как результат действия, которое вы начали для результата. Это изображение в вашем случае. Также это может быть видео или что-то еще, зависит от того, с чего вы начали какое действие.

0 голосов
/ 20 октября 2011

@ Франкенштейн: весь процесс выполняется правильно, кроме следующего кода

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

Вместо этого выполните следующий процесс

  1. Получить URI из намерения.

    Uri selectedImageUri = data.getData ();

  2. Получить путь из URI

    Строка filestring = selectedImageUri.getPath ();

  3. Получить растровое изображение с помощью метода getThumbnail (ContentResolver cr, long origId, int type, опции BitmapFactory.Options) .

Эскиз растрового изображения = MediaStore.Images.Thumbnails.getThumbnail (getContentResolver (), selectedImageUriId, MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null);

Здесь getContentResolver () ---->Верните экземпляр ContentResolver для пакета вашего приложения. selectedImageUriId ----> Идентификатор выбранного эскиза.Это будет путь от пути.

Пример: путь: / external / images / media / 5 Здесь «5» - это идентификатор выбранного изображения.Эта «5» получается из пути с использованием строковых операций.

Наконец, следующий код вместо

Code

// Получите URI из Intent

UriselectedImageUri = data.getData ();

// Получить декодированный путь из URI

String filestring = selectedImageUri.getPath ();

// Получить идентификатор изпуть.Строка x = filestring.substring (23);

long selectedImageUriId = Long.parseLong (x);

// Получить растровое изображение

Растровое изображение = MediaStore.Images.Thumbnails.getThumbnail (getContentResolver (), selectedImageUriId, MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...