andorid在 Fragment中调用摄像机

本文探讨了在Android应用中,Fragment如何正确调用相机和图库功能时遇到的问题,包括相机选项导致应用强制关闭、图库选择后无法显示图片以及onActivityResult后Context可能为null的异常。提供了在onActivityResult方法中处理图片的方法,以避免nullpointException,并给出了解决这些问题的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我现在一个activity中有三个multiple fragments ,我现在采集我第三个 fragments信息

在这个fragments 上我想启动相机或者图库,看下面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public  Intent getImageIntent() {
 
     // Camera.
     final  List<Intent> cameraIntents =  new  ArrayList<Intent>();
     final  Intent captureIntent =  new  Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
     final  PackageManager packageManager = context.getPackageManager();
     final  List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent,  0 );
     for  (ResolveInfo res : listCam) {
         final  String packageName = res.activityInfo.packageName;
         final  Intent intent =  new  Intent(captureIntent);
         intent.setComponent( new  ComponentName(res.activityInfo.packageName,
                 res.activityInfo.name));
         intent.setPackage(packageName);
         cameraIntents.add(intent);
     }
 
     // Filesystem.
     final  Intent galleryIntent =  new  Intent();
     galleryIntent.setType( "image/*" );
     galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
 
     // Chooser of filesystem options.
     final  Intent chooserIntent = Intent.createChooser(galleryIntent,  "Select Source" );
 
     // Add the camera options.
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
             cameraIntents.toArray( new  Parcelable[] {}));
 
     // Calling activity should exeecute:
     // startActivityForResult(chooserIntent, 1);
     return  chooserIntent;
}
 
After that the onActivityResult executes:
 
private  void  handleSmallCameraPhoto(Intent intent) {
     Bundle extras = intent.getExtras();
     mProductBitmap = (Bitmap) extras.get( "data" );
     imgProduct.setImageBitmap(mProductBitmap);
}

其中 mProductBitmap  是一个Bitmap类型的全局变量,imgProduct  是一个已经初始化的 ImageView ,

我现在有如下问题:
   1、相机选项强制关闭了app.并在fragment  中报错了nullpointException
   2、图册选项不报错,但是不显示任何图片
   3、有的时候  在执行完onActivityResult 之后Context 为null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Override
public  void  onActivityResult( int  requestCode,  int  resultCode, Intent intent) {
 
     if  (resultCode == Activity.RESULT_OK) {
         handleSmallCameraPhoto(intent);
     else  {
         if  (requestCode ==  1 ) {
             InputStream stream =  null ;
             if  (intent ==  null ) {
                 System.out.println( "DATA IS NULL.." );
             else  {
                 try  {
                     if  (mProductBitmap !=  null ) {
                         mProductBitmap.recycle();
                     }
                     stream = getActivity().getContentResolver().openInputStream(
                             intent.getData());
                     mProductBitmap = BitmapFactory.decodeStream(stream);
                     System.out.println(mProductBitmap);
                     System.out.println( "Setting image result" );
                     imgProduct.setImageBitmap(mProductBitmap);
 
                 catch  (FileNotFoundException e) {
                     e.printStackTrace();
                 finally  {
                     if  (stream !=  null )
                         try  {
                             stream.close();
                         catch  (IOException e2) {
                             e2.printStackTrace();
                         }
                 }
             }
         }
     }

处理方法

你的图片已经报错到了 PATH_TO_SAVE  地址中

你需要在你的onActivityResult  方法中做么做
File file = new File(PATH_TO_SAVE);
Bitmap bmp = BitmapFactory.decodeFile(file.getPath());


原文地址:http://www.itmmd.com/201411/158.html 
该文章由 萌萌的IT人 整理发布,转载须标明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值