我正在尝试实现图像的"set as“功能。我使用的是Intent.ATTACH_DATA,这样用户至少可以选择联系人照片和墙纸。我应该通过的附加条件把我搞糊涂了。如果我没看错文档,
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.setType("image/*");
intent.setData(mImageCaptureUri);
startActivity(Intent.createChooser(intent, "hey"));应该是全部了。这适用于墙纸,但对于百万像素的数据,应用程序会崩溃,因为找不到裁剪活动。有没有人有一个实用的例子?官方的图库应用程序确实设法找到了camera.crop活动...
关于在哪里可以找到详细的系统意图文档的一般提示也是受欢迎的。
发布于 2012-06-19 15:19:12
在漫长而曲折地浏览了android源代码之后,我在默认图库(gallery3d)应用程序中找到了实际的代码。我适应了在我自己的应用程序中使用,为了在导入到其他应用程序中时方便起见,我重写了它。如果你使用或欣赏这一点,我要求你对这个答案投上赞成票。
改编自gallery3d source at grepcode
用法:更改第一行以匹配照片的完整路径(以/mnt/开头)。将字符串"set_as“作为动作选择器标题添加到strings.xml中。
String absolutepath = MyApplication.appRootDir + relpath;//change for your application
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
MimeTypeMap map = MimeTypeMap.getSingleton();
String ext = absolutepath.substring(absolutepath.lastIndexOf('.') + 1);
String mimeType = map.getMimeTypeFromExtension(ext);
Uri uri = Uri.fromFile(new File(absolutepath));
intent.setDataAndType(uri, mimeType);
intent.putExtra("mimeType", mimeType);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Activity activity = (Activity) this;
activity.startActivity(Intent.createChooser(
intent, activity.getString(R.string.set_as)));发布于 2018-04-16 15:40:39
上面的答案很棒,但这里是我测试和使用的一个。
private void setAsWallpaper(String path_of_file) {
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_ATTACH_DATA);
File file = new File(path_of_file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setDataAndType(FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file), getMimeType(path_of_file);
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(context, "Exception generated", Toast.LENGTH_SHORT).show();
}
}
private static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;
}简单地调用setAsWallpaper(路径);这里的路径是文件的绝对路径。
https://stackoverflow.com/questions/11091980
复制相似问题