Android Camera Intent 与 Android L 崩溃

Posted

技术标签:

【中文标题】Android Camera Intent 与 Android L 崩溃【英文标题】:Android Camera Intent crashes with Android L 【发布时间】:2015-07-06 10:03:43 【问题描述】:

在 Kitkat 之前,我的应用程序在所有 api 上都能正常工作,但在棒棒糖中却不能工作。在我的应用程序中单击使用相机拍摄照片的那一刻,它崩溃了。

cam.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                Intent cameraIntent = new Intent(
                        android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            
        );

这是我的 onActivityResult()

    case CAMERA_REQUEST: 

    Uri selectedImage = data.getData();
    String[] filePathColumn =  MediaStore.Images.Media.DATA ;

    Cursor cursor = getContentResolver().query(selectedImage,
            filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(picturePath, options);
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;
    String imageType = options.outMimeType;
        options.inSampleSize = calculateInSampleSize(options,200,100);//512 and 256 whatever you want as scale
        options.inJustDecodeBounds = false;
    Bitmap yourSelectedImage = BitmapFactory.decodeFile(picturePath,options);

    File pngDir = new   File(Environment.getExternalStorageDirectory(),"PicUploadTemp");
    if (!pngDir.exists()) 
        pngDir.mkdirs();
        

  File pngfile = new File(pngDir,"texture1.jpg");
    FileOutputStream fOut;

    try 
            fOut = new FileOutputStream(pngfile);

             yourSelectedImage.compress(Bitmap.CompressFormat.JPEG, 50,fOut);


     catch (FileNotFoundException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    Drawable d = Drawable.createFromPath(pngfile.getPath().toString());
    rlLayout.setBackground(d);

    yourSelectedImage.recycle();
//    resizedBitmap.recycle();

    xfile = pngfile; 

break;

我想压缩图像,上面的代码在姜饼、ICS、kitkat 上运行得非常好,但不适用于 Android L

我得到空指针异常

请给我一些解决方案

提前致谢

【问题讨论】:

***.com/a/30977539/4447803 试试这个链接,它可以在棒棒糖中使用 【参考方案1】:

在没有 logcat 输出的情况下无法真正说明这一点,由于您使用了 BitmapFacotry 类中已弃用的方法,它可能会变为 null。

在您的活动中全局定义这些,

   Intent cameraIntent = new Intent(
             android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

   private static final int CAMERA_REQUEST = 1888; 

在按钮点击中调用你的相机意图,像这样

    startActivityForResult(cameraIntent, CAMERA_REQUEST);

请务必使用

           @Override
           public void onConfigurationChanged(Configuration newConfig) 
             super.onConfigurationChanged(newConfig);
            

用它来检索照片

 public void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CAMERA_REQUEST && resultCode == getActivity().RESULT_OK) 

        //get photo
        Bitmap photo = (Bitmap) data.getExtras().get("data");

     

【讨论】:

谢谢,通过将您的解决方案与其他博客的解决方案相结合解决了我的问题

以上是关于Android Camera Intent 与 Android L 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Android 开发 Camera类的拍照与录像

未找到处理 Intent act=com.android.camera.action.CROP 的 Activity

Camera intent.getData()在某些设备上返回null,主要在android 7.0

android camera intent 在某些手机上崩溃应用程序(约 20%)

Intent调用系统拍照程序,返回图片太小的问题

Android Camera 调用系统相机应用