onActivityResult 需要帮助获取图像
onActivityResult need help getting image
我正在尝试通过使用 startActivityForResult
从照片库开始 Intent
到 select 并覆盖 onActivityResult
来获取图像。我不知道为什么,但是当我 select 一张图片并尝试在我的屏幕上绘制它时,没有任何反应。我可以 select 图片,然后就是这样。
我搜索了答案,但找不到任何有用的信息。似乎没有太多我可以尝试解决这个问题。我相信我已经正确地实施了一切。这也是我第一次尝试这个,所以我可能是错的。当我调用 getGalleryImage()
.
时,我已经覆盖了 onActivityResult
以获取位图并使用它设置来自另一个 class 的位图变量
从我的 GameView 启动 Intent class:
MainActivity activity = (MainActivity) context;
public void getGalleryImage() {
Intent gallery = new Intent(Intent.ACTION_PICK);
gallery.setType("image/*");
String[] mimeTypes = { "image/png" };
gallery.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
activity.startActivityForResult(gallery, 1);
}
重写 MainActivity 中的方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == MainActivity.RESULT_OK) {
final Uri uri = data.getData();
InputStream in;
try {
in = getContentResolver().openInputStream(uri);
final Bitmap selected_img = BitmapFactory.decodeStream(in);
view.setSelectedImage(selected_img);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(this, "An error occured!", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, "You didn't pick an image!", Toast.LENGTH_LONG).show();
}
}
}
我想获取图像并将其绘制到我的屏幕上。发生的事情是我 select 意图打开后的图像,然后什么也没有。它回到了我的 activity 并且似乎什么都没有画。
您必须提供来自 android 版本 7(牛轧糖)
的提供商
首先在清单中设置供应商
</application>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
接下来在资源的 xml 文件夹中定义一个名为 filepaths 的 xml 文件路径 :
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="external_files"
path="." />
</paths>
下一次调用 intent 以选择图像:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
String[] mimeTypes = {"image/jpeg", "image/png"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
startActivityForResult(intent, GALLERY_REQUEST_CODE);
在您的活动结果中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri selectedImage = null;
if (requestCode == GALLERY_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
selectedImage = data.getData();
InputStream in;
try {
in = getContentResolver().openInputStream(uri);
final Bitmap selected_img = BitmapFactory.decodeStream(in);
yourimageview.setImageBitmap(selected_img);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(this, "An error occured!", Toast.LENGTH_LONG).show();
}
}
}
}
您的 View.setSelectedImage()
似乎来自自定义 class,您可能想先尝试在 ImageView
上绘制 Bitmap
看看是否有效。
改用 ImageView
并从 onActivityResult()
中调用 ImageView.setImageBitmap(bitmap)
。并确保解码的位图不会太大,因为它会导致您的应用卡顿,您可能想尝试 loading large bitmap efficiently.
此外,将您的 getGalleryImage()
方法更新为:
public void getGalleryImage() {
final Intent galleryIntent = Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, 1);
}
我正在尝试通过使用 startActivityForResult
从照片库开始 Intent
到 select 并覆盖 onActivityResult
来获取图像。我不知道为什么,但是当我 select 一张图片并尝试在我的屏幕上绘制它时,没有任何反应。我可以 select 图片,然后就是这样。
我搜索了答案,但找不到任何有用的信息。似乎没有太多我可以尝试解决这个问题。我相信我已经正确地实施了一切。这也是我第一次尝试这个,所以我可能是错的。当我调用 getGalleryImage()
.
onActivityResult
以获取位图并使用它设置来自另一个 class 的位图变量
从我的 GameView 启动 Intent class:
MainActivity activity = (MainActivity) context;
public void getGalleryImage() {
Intent gallery = new Intent(Intent.ACTION_PICK);
gallery.setType("image/*");
String[] mimeTypes = { "image/png" };
gallery.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
activity.startActivityForResult(gallery, 1);
}
重写 MainActivity 中的方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == MainActivity.RESULT_OK) {
final Uri uri = data.getData();
InputStream in;
try {
in = getContentResolver().openInputStream(uri);
final Bitmap selected_img = BitmapFactory.decodeStream(in);
view.setSelectedImage(selected_img);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(this, "An error occured!", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, "You didn't pick an image!", Toast.LENGTH_LONG).show();
}
}
}
我想获取图像并将其绘制到我的屏幕上。发生的事情是我 select 意图打开后的图像,然后什么也没有。它回到了我的 activity 并且似乎什么都没有画。
您必须提供来自 android 版本 7(牛轧糖)
的提供商首先在清单中设置供应商
</application>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
接下来在资源的 xml 文件夹中定义一个名为 filepaths 的 xml 文件路径 :
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="external_files"
path="." />
</paths>
下一次调用 intent 以选择图像:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
String[] mimeTypes = {"image/jpeg", "image/png"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
startActivityForResult(intent, GALLERY_REQUEST_CODE);
在您的活动结果中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri selectedImage = null;
if (requestCode == GALLERY_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
selectedImage = data.getData();
InputStream in;
try {
in = getContentResolver().openInputStream(uri);
final Bitmap selected_img = BitmapFactory.decodeStream(in);
yourimageview.setImageBitmap(selected_img);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(this, "An error occured!", Toast.LENGTH_LONG).show();
}
}
}
}
您的 View.setSelectedImage()
似乎来自自定义 class,您可能想先尝试在 ImageView
上绘制 Bitmap
看看是否有效。
改用 ImageView
并从 onActivityResult()
中调用 ImageView.setImageBitmap(bitmap)
。并确保解码的位图不会太大,因为它会导致您的应用卡顿,您可能想尝试 loading large bitmap efficiently.
此外,将您的 getGalleryImage()
方法更新为:
public void getGalleryImage() {
final Intent galleryIntent = Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, 1);
}