选择图片后活动力被破坏

时间:2015-06-11 11:50:16

标签: android

我有一个简单的choose image source对话框:

public void toggleImagePicker()
{
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Choose Image Source");
    builder.setItems(new CharSequence[]{"Gallery", "Camera"}, new DialogInterface.OnClickListener()
    {

        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            //                inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
            switch (which) {
                case 0:
                    // GET IMAGE FROM THE GALLERY
                    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                    intent.setType("image/*");

                    Intent chooser = Intent.createChooser(intent, "Choose a Picture");
                    if (mBackgroundClicked)
                        startActivityForResult(chooser, REQUEST_GALLERY_IMAGE_FOR_BACKGROUND);
                    else
                        startActivityForResult(chooser, REQUEST_GALLERY_IMAGE);
                    break;

                case 1:
                    Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE");

                    File cameraFolder;

                    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
                        cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(), ".helper/");
                    else
                        cameraFolder = getActivity().getCacheDir();
                    if (!cameraFolder.exists())
                        cameraFolder.mkdirs();

                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
                    String timeStamp = dateFormat.format(new Date());
                    String imageFileName = "picture_" + timeStamp + ".jpg";

                    File photo = new File(Environment.getExternalStorageDirectory(), ".helper/" + imageFileName);
                    if (!mBackgroundClicked)
                        mProfilePhotoPath = new String(photo.getAbsolutePath());
                    else
                        mBackgroundPhotoPath = new String(photo.getAbsolutePath());
                    getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
                    //                                initialURI = Uri.fromFile(photo);
                    if (mBackgroundClicked)
                        startActivityForResult(getCameraImage, REQUEST_IMAGE_CAPTURE_FOR_BACKGROUND);
                    else
                        startActivityForResult(getCameraImage, REQUEST_IMAGE_CAPTURE);

                    break;

                default:
                    break;
            }
        }
    });

    builder.show();
}

我尝试选择图像,然后显示对话框并单击相机或图库。否则我的活动将被销毁并重新创建。

  

LogCat中没有例外。

我在日志中发现的一件事:

06-11 14:45:57.700      458-549/? W/InputDispatcher﹕ channel '221e47c0 ******.ProfileExpertActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9

注意:在片段中实现选择机制。

1 个答案:

答案 0 :(得分:1)

如果没有应用程序来处理该操作,那么在开始使用resolveActivity进行检查之前,它将生成NullPointerException以检查是否有任何应用程序来处理它。

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
// Verify that the intent will resolve to an activity
if (photoPickerIntent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(photoPickerIntent, GALLERY_PICKER);    
}