我在该应用程序中实现了一个应用程序,其中有一个按钮。如果你点击那个按钮,那么相机就会被打开,你可以抓住一些东西。捕获的图像将显示在应用程序中。
但现在我想再添加一个按钮。如果单击它,则会在网格视图中显示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:没有通过Activity#showDialog
显示没有ID为10020的对话框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):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):在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):at java.lang.reflect.Method.invokeNative(Native Method)
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.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:38.523:INFO / LogFilter(726):找不到必需的“主机”HTTP标头。
答案 0 :(得分:1)
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?
没有太多的概念知识,但您可以将数据视为您为结果启动的活动的输出..这是您的情况下的图像..也可以是视频或其他任何取决于您开始的活动哪个行动。
答案 1 :(得分:0)
@Frankenstein:整个过程是正确的,除了以下代码
位图缩略图=(位图)data.getExtras()。get(“data”);
而不是这样做,请执行以下过程
从意图中获取URI。
Uri selectedImageUri = data.getData();
从URI获取路径
String filestring = selectedImageUri.getPath();
使用getThumbnail(ContentResolver cr,long origId,int kind,BitmapFactory.Options选项)方法获取位图。
位图缩略图= MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(),selectedImageUriId, MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options)null);
此处 getContentResolver() ---->返回应用程序包的ContentResolver实例。 selectedImageUriId ---->所选缩略图的ID。 这将从路径开始。
Ex:路径:/ external / images / media / 5 这里“5”是所选图像的ID。这个“5”来自使用字符串操作的路径。
最后是以下代码而不是
Code
//从意图中获取URI
Uri selectedImageUri = data.getData();
//从URI获取解码路径
String filestring = selectedImageUri.getPath();
//从路径中获取ID。 String x = filestring.substring(23);
long selectedImageUriId = Long.parseLong(x);
//获取位图
位图缩略图= MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(),selectedImageUriId, MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options)null);