使用Intent启动图片裁剪时遇到的问题:Intent#setData()与Intent#setType()赋值问题

在做使用Intent启动图片裁剪时遇到一个问题:

分开调用Intent#setData();Intent#setType();这两个方法时,程序无法正确运行,但使用Intent#setDataAndType();程序正常运行。

原因分析:

查看Intent#setData(),Intent#setType()源码:

public Intent setData(Uri data) {
        mData = data;
        mType = null;
        return this;
    }
  public Intent setType(String type) {
        mData = null;
        mType = type;
        return this;
    }

分别调用Intent#setData(),Intent#setType()时,会把另一个值设置为null,并覆盖原有值。所以如果分别调用这两个方法那么永远只有一个会被正确地赋值。

所以在这两个属性都要赋值时要使用Intent#setDataAndType():

 public Intent setDataAndType(Uri data, String type) {
        mData = data;
        mType = type;
        return this;
    }
时间: 2024-08-04 20:06:52

使用Intent启动图片裁剪时遇到的问题:Intent#setData()与Intent#setType()赋值问题的相关文章

activity和Task 有关的 Intent启动方式结合intent.setFlags()

FLAG_ACTIVITY_NEW_TASK----简而言之,跳转到的activity根据情况,可能压在一个新建的栈中. 如果设置,这个Activity会成为历史stack中一个新Task的开始.一个Task(从启动它的Activity到下一个Task中的 Activity)定义了用户可以迁移的Activity原子组.Task可以移动到前台和后台:在某个特定Task中的所有Activity总是保持相同的次序. 这个标志一般用于呈现“启动”类型的行为:它们提供用户一系列可以单独完成的事情,与启动它

Activity、Task、Application关系+Intent启动Flag

什么是Android  Application? 简单来说,一个apk文件就是一个Application. 任何一个AndroidApplication基本上是由一些Activities组成,当用户与应用程序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应. 这些Activities捆绑在一起成为了一个处理特定需求的Application,并且以".apk"作为后缀名存在于文件系统中. Android平台默认下的应用程序 例如:Email.Cale

ios替换app启动图片时系统报错的解决办法

ios替换app启动图片时系统报错的解决办法:我个人建议是在开发时候经常行的保存项目,并且在修改项目图标图片.app启动图片前,一定要先备份一份没有添加这两项图片的项目. 如果您的项目已经开发完成了,进入到发布前添加项目图标.app启动图片的时候,一定要确定了这两项的所有图片不会更改了再去添加,否则更改已经添加好的加项目图标.app启动图片就会报错, 如果您报错了,百度之后也没有解决办法,那么就尝试在已经备份的项目中重新去添加图片就可以了.

从相机相册获取图片裁剪后用于评论晒图或更换背景图

这是我人生中写的第一篇博客,是否要纪念一下这一刻(2016.09.01 16:52).其实关于写博客,老早就有这种写法,首先觉得他能够帮我总结我学到的和用过的技术,其次还能帮助那些和我有一样需求的人,我也是很开心啊,但是至于为什么现在才写第一篇,首先没有想好写什么,然后前段时间也确实比较忙.是不是那些来观技术的人已经想骂人了啊...啊哦!原谅我第一次写博客的激动心情吧! 废话不多说,开始我们的问题吧,首先因为我做了两次关于调用相机和相册获取图片的功能,觉得很有必要总结一下,下面我将从这两个功能出

Android图片裁剪功能——调用系统裁剪

花了两天时间看了下android的图片裁剪功能的实现.其实刚开始做这个我挺虚的,以为整个功能都需要自己写出来,但查了些资料,发现android已经提供了裁剪功能,需要的话自己调用就成了.soga,这下轻松多了. 首先推荐几篇博客 Android大图片裁剪终极解决方案 要想弄明白裁剪功能,这系列博客非常重要,你可以不看我下面总结的,但你一定要看他这系列的几篇文章. Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪) 这篇也不错,比较喜欢他的注释.虽然也有些误导,比如说他有一段对setD

android 用户头像,图片裁剪,上传并附带用户数据base64code 方式

图片上传的文件流我上一篇博客写了,这一篇我们说一下base64,base64上传方式就是将图片转换成base64码,然后把base64码以字符串的方式上传,然后服务器接收到以后再解码就可以了,相对于文件流来说比较简单: 用户头像上传我们首先要获得图片的url然后再裁剪图片,然后把裁剪后的图片转换成base64然后在上传: 下边是安卓端代码: 首先我们要获得裁剪后的图片:一,选择图片: 代码如下,通过对话框选择获得图片的方式: activity: /* * 提示对话框 */ private voi

Android图片裁剪解决方案 -- 从相册截图

在Android开发中,可以轻松调用一个Intent完成从相册中截图的工作: Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); 附加选项如下: 选项 数据类型 描述 crop String 发送裁剪信号 aspectX int X方向上的比例 aspectY

uCrop图片裁剪

uCrop使用 github地址 https://github.com/Yalantis/uCrop然后clone或下载到本地,运行之. 效果预览 app/build.gradle compile 'com.yalantis:ucrop:1.5.0' AndroidManifest.xml 1 <activity 2 android:name="com.yalantis.ucrop.UCropActivity" 3 android:screenOrientation="

Ios 应用的启动图片该怎么做

从App Store创建伊始,苹果就一直在推广一个观念:iOS app上架后,它的应用的启动图片(你打开应用第一眼看到的)应该仅仅是一个中间屏幕,仅此而已.引用苹果的人机界面指南如下: "一个启动文件或启动图片的作用是,当应用启动时提供给iOS系统的一个简单的图片占位符.这个图片占位符给用户一个印象:你的应用是快速的.有反应的,因为一点开应用它会立即展现,且很快被应用的第一屏替换." 问题是,相当多的人(包括我自己)忽略了这条准则.如果你对此感到好奇,可以看看上面的封面图,或者把所有运