在项目开发中,需要使用系统的图片选择页面来设置用户头像,使用网上的代码,并使用友盟的reportError来记录无法兼容的机型。
private void openSystemAlbum() {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // 4.4
Intent intent;
if (isKitKat) {
intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); // act=android.intent.action.PICK dat=content://media/external/images/media
if (!Utils.isIntentAvailable(getActivity(), Intent.ACTION_PICK)) {
UIUtils.showToast(getActivity(), "很抱歉,当前您的手机不支持相册选择功能,请安装相册软件");
String model = android.os.Build.MODEL;
MobclickAgent.reportError(EDUApplication.getInstance(),
"openSystemAlbum fail model " + model); // "openSystemAlbum fail model SM-G900F" (Samsung Galaxy S5)
return;
}
} else {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
if (intent.resolveActivity(getActivity().getPackageManager()) == null) {
UIUtils.showToast(getActivity(), "很抱歉,当前您的手机不支持相册选择功能,请安装相册软件");
String model = android.os.Build.MODEL;
MobclickAgent.reportError(EDUApplication.getInstance(),
"openSystemAlbum fail model " + model);
return;
}
}
startActivityForResult(intent, PHOTOZOOM);
}
在绝大多数手机上,代码正常,但在一些手机上却报出“No Activity found to handle Intent { act=android.intent.action.PICK dat=content://media/external/images/media }”的问题,比如Coolpad 8017 (4.4.2)、A31(4.4.4)、Coolpad 8702D(4.4.3)、F103(5.0.2)等。
这个异常可以通过try catch来解决。
try {
activity.startActivityForResult(intent, requestCode);
} catch (Throwable t) {
UIUtils.showToast(activity, "很抱歉,当前您的手机不支持相册选择功能,请安装相册软件");
String model = android.os.Build.MODEL;
MobclickAgent.reportError(EDUApplication.getInstance(),
"openSystemAlbum throw exception and mobile model is " + model);
}
后续版本可以针对友盟后台记录手机的model来进行特殊处理,来做到更好的体验。