所以,我正在制作一个以位图形式获取图像的图库应用程序。我希望 Android 默认图库应用程序来处理这个问题。我使用了墙纸意图,但它再次要求我选择要设置为墙纸的图像。我想通过这一步并将选定的位图用作墙纸。我该怎么做呢?
任何帮助,将不胜感激。谢谢!PS:我不想使用 WallpaperManager,因为它没有裁剪选项等。我希望默认应用程序为我处理它(所有设备都可以吗?如果不是,那么替代方案?)
所以,我正在制作一个以位图形式获取图像的图库应用程序。我希望 Android 默认图库应用程序来处理这个问题。我使用了墙纸意图,但它再次要求我选择要设置为墙纸的图像。我想通过这一步并将选定的位图用作墙纸。我该怎么做呢?
任何帮助,将不胜感激。谢谢!PS:我不想使用 WallpaperManager,因为它没有裁剪选项等。我希望默认应用程序为我处理它(所有设备都可以吗?如果不是,那么替代方案?)
这是一个 Intent,可帮助您从图库中加载图像:
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(
Intent.createChooser(intent, getResources().getString(R.string.select_a_file)),
ACTION_REQUEST_GALLERY);
这应该是您的 activityOnResult 的一部分。您可以在此处处理从图库中返回的图像。最后一行有一个位图,这是用户从图库中选择的:
if (resultCode == RESULT_OK && requestCode == ACTION_REQUEST_GALLERY) {
Uri selectedImageUri = data.getData();
String[] projection = {MediaStore.MediaColumns.DATA};
Cursor cursor = managedQuery(selectedImageUri, projection, null, null,
null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
String selectedImagePath = cursor.getString(column_index);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(selectedImagePath, options);
final int REQUIRED_SIZE = 200;
int scale = 1;
while (options.outWidth / scale / 2 >= REQUIRED_SIZE
&& options.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
options.inSampleSize = scale;
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(selectedImagePath, options);
}