标签:
本章内容
Intent详解调用系统程序使用Intent实现组件间数据传递定制Intent
Intent称为意图,用于描述一次操作的动作、参数以及附加的数据,用于很多地方,可以理解类似于网页之间的超链接。Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。Android的三个基本组件——Activity,Service和Broadcast Receiver——都是通过Intent机制激活的,不同类型的组件有不同的传递Intent方式。要激活一个新的Activity,或者让一个现有的Activity做新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法,要启动一个新的Service,或者向一个已有的Service传递新的指令,调用Context.startService()方法或者调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。
?查看某联系人的资料?发邮件给某个人?给某人打电话Android会根据Intent寻找到相应的组件并传入Intent执行Intent可以在如下动作时被传入
?Content.startActivity()?Content.startService()?Content.sendBroadcast()
Android中的组件需要在AndroidManifest.xml中注册才能被调用?通过intent-filter进行注册
?Action:用来指明要实施的动作是什么,比如说ACTION_VIEW, ACTION_EDIT等?Data: 要事实的具体的数据,一般由一个Uri变量来表示?Category:一个字符串,包含了关于处理该intent的组件的种类的信息。一个intent对象可以有任意个category。intent类定义了许多category常数?Type:显式指定Intent的数据类型(MIME)?component:指定Intent的目标组件的类名称?extras:附加信息
几种常见的Action如下:
名称
|
描述
|
ACTION_CALL activity
|
启动一个电话
|
ACTION_EDIT activity
|
显示用户编辑的数据
|
ACTION_MAIN activity
|
作为Task中第一个Activity启动
|
ACTION_SYNC activity
|
同步手机与数据服务器上的数据
|
ACTION_BATTERY_LOW broadcast receiver
|
电池电量过低警告
|
ACTION_HEADSET_PLUG broadcast receiver
|
插拔耳机警告
|
ACTION_SCREEN_ON broadcast receiver
|
屏幕变亮警告
|
ACTION_TIMEZONE_CHANGED broadcast receiver
|
改变时区警告
|
?ACTION_CALL所对应的Data通常是“tel:”开头的?ACTION_VIEW对应的Data通常是“http:”开头的
?setData() 只能设置URI?setType() 只能设置MIME Type?setDataAndType() 可以设置URI或MIME Type
?CATEGORY_BROWSABLE?CATEGROY_HOME?CATEGORY_LAUNCHER
?addCategory()?removeCategory()
?可以随意设置多对键值对?这个属性与Android匹配Intent无关?Intent提供了多个相对的get……方法和set……方法用于读写数据?当传入到组件中时,通过Bundle的getExtras可以获得数据
<span style="font-family:SimSun;font-size:14px;">//发送MMS Uri uri = Uri.parse("content://media/external/images/media/23"); Intent it = new Intent(Intent.ACTION_SEND); it.putExtra("sms_body", "some text"); it.putExtra(Intent.EXTRA_STREAM, uri); it.setType("image/png"); startActivity(it); </span>
1、调用者生成Intent对象,并设置相关属性2、向Android提交Intent请求3、Android对Intent进行解析,找到相应的组件执行
<span style="font-family:SimSun;font-size:14px;">Uri uri = Uri.parse( "http://www.google.com"); Intent it = new Intent(Intent.ACTION_VIEW,uri); </span>
<span style="font-family:SimSun;font-size:14px;"> Uri uri = Uri.parse( "geo:38.899533,-77.036476" ); Intent it = new Intent(Intent.Action_VIEW,uri); </span>
<span style="font-family:SimSun;font-size:14px;"> Uri uri = Uri.parse( "tel:xxxxxx" ); Intent it = new Intent(Intent.Action_DIAL,uri); </span>
<span style="font-family:SimSun;font-size:14px;"> <uses-permission android:name="android.permission.CALL_PHONE"/> </span>
<span style="font-family:SimSun;font-size:14px;">Intent it = new Intent(this, SettingActivity.class); it.putExtra(“username”, “root”); startActivity(it); </span>
<span style="font-family:SimSun;font-size:14px;">Intent it = getIntent(); String username = it.getExtras().getString(“username”); </span>
<span style="font-family:SimSun;font-size:14px;">startActivityForResult (intent, REQUEST_CODE);</span>
<span style="font-family:SimSun;font-size:14px;">protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == REQUEST_CODE) { if(resultCode == RESULT_OK) { data.getExtras().getString(“someresult”); } } } </span>
<span style="font-family:SimSun;font-size:14px;">Bundle bundle = new Bundle(); bundle.putString(“someresult”, “somevalue”); bundle.putString(“otherresult”, “othervalue”); Intent it = new Intent(); it.putExtra(bundle); setResult(RESULT_OK, it); finish(); </span>
?由于另一个项目的Activity不属于当前项目,不能得到Class?所以我们希望能够通过隐式Intent的方式启动?这时就需要对Action等属性进行自定义
?并在Intent中使用这些自定义属性
?首先在AndroidManifest.xml中使用Intent-Filter自定义各种属性?然后在启动Activity时,在Intent中使用自定义属性
标签:
原文地址:http://blog.csdn.net/zhangchen124/article/details/52053356