我有一个简单的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
注意:在片段中实现选择机制。
答案 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);
}