Android中Intent的setData,setType和setDataAndType的用法

本文详细介绍了Android中Intent的数据传递机制,包括如何设置数据类型、数据URI及同时设置两者的方法。并通过源代码解释了这些操作背后的实现原理。

Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。

1 settype

使用该函数表示要查找文件的mime类型(如*/*),这个和组件在manifest里定义的相对应,但在源代码里:

  1. public Intent setData(Uri data) { 
  2.         mData = data; 
  3.         mType = null
  4.         return this
  5.     } 
  1. public Intent setData(Uri data) { 
  2.         mData = data; 
  3.         mType = null
  4.         return this
  5.     } 

会将type设为null。

2 setdata

该函数的参数是uri,所以要将数据通过该函数传递时,记得要把数据转化为uri,如Uri.fromFile(new File("/mnt/sdcard/"))。

该函数源代码

  1. public Intent setType(String type) { 
  2.         mData = null
  3.         mType = type; 
  4.         return this
  5.     } 
  1. public Intent setType(String type) { 
  2.         mData = null
  3.         mType = type; 
  4.         return this
  5.     } 

3 所以要同时设置data和type的话只能用函数setdataandtype了

  1. public Intent setDataAndType(Uri data, String type) { 
  2.         mData = data; 
  3.         mType = type; 
  4.         return this
  5.     } 
  1. public Intent setDataAndType(Uri data, String type) { 
  2.         mData = data; 
  3.         mType = type; 
  4.         return this
  5.     }
Android 开发中,`Intent` 的 `setData()` 方法用于向 `Intent` 对象附加数据 URI(Uniform Resource Identifier),以便目标组件可以使用该 URI 来访问特定资源。`setData()` 常用于启动 Activity 或执行某些操作时传递数据源,例如拨打电话、打开网页、访问文件等。 ### 使用 `setData()` 的基本方法 `Intent` 提供了 `setData(Uri data)` 方法来设置数据 URI。通常需要结合 `Uri.parse()` 方法将字符串转换为 `Uri` 类型。例如: ```java Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.example.com")); startActivity(intent); ``` 上述代码将启动默认的浏览器并访问指定的网址。 ### 常见使用场景 1. **拨打电话** 在拨打电话时,`setData()` 用于传递电话号码。需要在 `AndroidManifest.xml` 中添加权限: ```xml <uses-permission android:name="android.permission.CALL_PHONE" /> ``` 然后在代码中设置: ```java Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:123456789")); startActivity(intent); ``` 2. **发送邮件** 可以通过 `setData()` 指定邮件地址,并结合 `Intent.ACTION_SENDTO` 启动邮件客户端: ```java Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:example@example.com")); intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); intent.putExtra(Intent.EXTRA_TEXT, "Email body text"); startActivity(intent); ``` 3. **打开地图** 使用 `setData()` 传递地理位置坐标,启动地图应用: ```java Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("geo:37.7749,-122.4194")); // San Francisco coordinates startActivity(intent); ``` 4. **访问网页或资源** 启动浏览器并访问指定网页: ```java Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.example.com")); startActivity(intent); ``` ### 与 `setType()` `setDataAndType()` 的区别 - `setData(Uri data)`:仅设置数据 URI。 - `setType(String type)`:仅设置 MIME 类型。 - `setDataAndType(Uri data, String type)`:同时设置数据 URI MIME 类型。 例如,如果要发送图片附件邮件,可以结合 URI MIME 类型: ```java Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setDataAndType(Uri.fromFile(file), "image/*"); startActivity(intent); ``` ### 注意事项 - 使用 `setData()` 时,确保目标 Activity 支持相应的 `Intent` 数据格式。 - 若操作涉及敏感功能(如打电话、发送短信等),必须在清单文件中声明相应权限。 - URI 的格式必须正确,否则可能导致 `ActivityNotFoundException`。 通过合理使用 `setData()`,可以实现跨应用的数据传递操作调用,提高应用的灵活性交互性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值