onActivityResult
は廃止されているため、私のgetBitmap
は機能しません。これを達成するための代替コードはありますか?
ここに変更が必要なコードがあります。提案はありますか?
val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectedPhotoUri)
getBitmap
が交差し、非推奨となった
これは私のために働いた、
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
val selectedPhotoUri = data.data
try {
selectedPhotoUri?.let {
if(Build.VERSION.SDK_INT < 28) {
val bitmap = MediaStore.Images.Media.getBitmap(
this.contentResolver,
selectedPhotoUri
)
imageView.setImageBitmap(bitmap)
} else {
val source = ImageDecoder.createSource(this.contentResolver, selectedPhotoUri)
val bitmap = ImageDecoder.decodeBitmap(source)
imageView.setImageBitmap(bitmap)
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
これは私にとってJavaでうまくいきました
ImageDecoder.Source source = ImageDecoder.createSource(this.getContentResolver(), pictureUri);
Bitmap bitmap = ImageDecoder.decodeBitmap(source);
公式ドキュメント: を確認してください
このメソッドはAPIレベル29で廃止されました。画像の読み込みは、PostProcessorのような最新の機能を提供する
ImageDecoder#createSource(ContentResolver, Uri)
を介して実行する必要があります。
以下を使用できます。
private fun getCapturedImage(selectedPhotoUri: Uri): Bitmap {
val bitmap = when {
Build.VERSION.SDK_INT < 28 -> MediaStore.Images.Media.getBitmap(
this.contentResolver,
selectedPhotoUri
)
else -> {
val source = ImageDecoder.createSource(this.contentResolver, selectedPhotoUri)
ImageDecoder.decodeBitmap(source)
}
}
Uriからビットマップをロードするためのクラスを作成しました。
public class BitmapResolver {
private final static String TAG = "BitmapResolver";
@SuppressWarnings("deprecation")
private static Bitmap getBitmapLegacy(@NonNull ContentResolver contentResolver, @NonNull Uri fileUri){
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(contentResolver, fileUri);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@TargetApi(Build.VERSION_CODES.P)
private static Bitmap getBitmapImageDecoder(@NonNull ContentResolver contentResolver, @NonNull Uri fileUri){
Bitmap bitmap = null;
try {
bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(contentResolver, fileUri));
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
public static Bitmap getBitmap(@NonNull ContentResolver contentResolver, Uri fileUri){
if (fileUri == null){
Log.i(TAG, "returning null because URI was null");
return null;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
return getBitmapImageDecoder(contentResolver, fileUri);
} else{
return getBitmapLegacy(contentResolver, fileUri);
}
}
}
時間を節約するために...
getBitmap
APIが最新のAndroid SDK-29)では機能しないことは明らかでした。つまり、これは私にとってはうまくいきました
Uri contentURI = data.getData();
try {
imageView.setImageURI(contentURI);
} catch (Exception e) {
e.printStackTrace();
}
これがあなたのために機能しない場合は、私に知らせてください、他のオプションがあります!
これを試しましたか?
val bitmap = ImageDecoder.createSource(contentResolver, uri)
ImageDecoder.createSource(this.getContentResolver()、pictureUri)
正常に動作しますが、このコードを使用できるようにするには、mindSdkVersionが28以上である必要があります。