首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Intent.ATTACH_DATA

如何使用Intent.ATTACH_DATA
EN

Stack Overflow用户
提问于 2012-06-19 06:26:27
回答 2查看 5.2K关注 0票数 6

我正在尝试实现图像的"set as“功能。我使用的是Intent.ATTACH_DATA,这样用户至少可以选择联系人照片和墙纸。我应该通过的附加条件把我搞糊涂了。如果我没看错文档,

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
    intent.setType("image/*");
intent.setData(mImageCaptureUri);
        startActivity(Intent.createChooser(intent, "hey"));

应该是全部了。这适用于墙纸,但对于百万像素的数据,应用程序会崩溃,因为找不到裁剪活动。有没有人有一个实用的例子?官方的图库应用程序确实设法找到了camera.crop活动...

关于在哪里可以找到详细的系统意图文档的一般提示也是受欢迎的。

EN

回答 2

Stack Overflow用户

发布于 2012-06-19 15:19:12

在漫长而曲折地浏览了android源代码之后,我在默认图库(gallery3d)应用程序中找到了实际的代码。我适应了在我自己的应用程序中使用,为了在导入到其他应用程序中时方便起见,我重写了它。如果你使用或欣赏这一点,我要求你对这个答案投上赞成票。

改编自gallery3d source at grepcode

用法:更改第一行以匹配照片的完整路径(以/mnt/开头)。将字符串"set_as“作为动作选择器标题添加到strings.xml中。

代码语言:javascript
复制
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)));
票数 14
EN

Stack Overflow用户

发布于 2018-04-16 15:40:39

上面的答案很棒,但这里是我测试和使用的一个。

代码语言:javascript
复制
  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(路径);这里的路径是文件的绝对路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11091980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档