问题描述
自从我将 Samsung galaxy Tab A 10.1 (2019) 2Gb 更新为 android 10 后,我的相机意图在返回照片时会重新启动我的应用程序/杀死我的片段。 问题不一致,有时我可以拍 10 张照片没有问题,因为应用程序以 1 张照片重新启动。
我想知道是否有人已经遇到过同样的问题,并且他们是否设法找到了解决方案。
这是我开始相机意图的地方
File imageDirectory = new File(user.getimageCacheDirectoryPath() + "/pole/" + pole.getId() + "/");
if (!imageDirectory.exists())
imageDirectory.mkdirs();
String fname = "/photo_" + foto + "_pre.jpg";
tempImageFile = new File(imageDirectory + fname);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
if (tempImageFile.exists()) {
tempImageFile.delete();
}
mImageCaptureUri = FileProvider.getUriForFile(getActivity(),BuildConfig.APPLICATION_ID + ".provider",tempImageFile);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri);
intent.putExtra("return-data",true);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
List<ResolveInfo> resInfoList = getActivity().getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
getActivity().grantUriPermission(packageName,mImageCaptureUri,Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
}
startActivityForResult(intent,REQUEST_IMAGE_CAPTURE);
这在 onActivityResult 中。
注意:调试器永远不会达到这个。
@Override
public void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode){
case REQUEST_IMAGE_CAPTURE:
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
InputStream input = getActivity().getContentResolver().openInputStream(mImageCaptureUri);
Bitmap imageBitmap = BitmapFactory.decodeStream(input,null,options);
imageBitmap = Utils.rotateImageIfrequired(imageBitmap,tempImageFile.getPath());
imageBitmap = Bitmap.createScaledBitmap(imageBitmap,1100,1400,true);
saveImage(imageBitmap);
} catch (NullPointerException e) {
e.printstacktrace();
} catch (IOException e) {
e.printstacktrace();
}
break;
}
}
}
解决方法
这在 Activity 生命周期中是预期的,如果它愿意,Android 可能会杀死 backstack Activity 并尝试从 onSaveInstanceState 和 onRestoreInstanceState 重建它,如果你实现这两个,你可以安全地避免状态的丢失和恢复