Intent是什么东西?
来源:互联网 发布:怎样看融资融券数据 编辑:程序博客网 时间:2024/04/28 21:26
Intent,中文意思为意图,就是说你想要干什么,然后把这个意思传递给其它组件,这个组件帮你完成你的意图。Intent作为一个消息对象被传递给Android组件,作为组件之间沟通的桥梁。
Intent有三个方面的用途:
- 启动Activity
- 启动Service
- 传递broadcast
Intent的类型
- Explicit intents 通过显示式的class name启动
- Implicit intents 通过要完成的Action启动,系统会根据manifest中每个组件注册的intent filters来决定启动哪一个组件完成这个Action任务
Intent主要包含下面的信息,用来定位要启动的组件
- Component name, 要启动的组件名,当指定时,这个Intent就是Explicit Intent, 如果不指定Component name,系统会根据其它的Intent信息启动合适的组件,当要启动的组件为Service的时候,必须指定Component name,使用setClassName()
- Action, 用来描述要执行行为的字符串,使用setAction(), 可以自定义自己的Action, 需要加包名
- Data,根据Action的不同,需要携带不同的data数据,它是一个URI对象,使用setData(),setType(),setDataAndType()
- Category,用来指定哪种类型的组件应该handle这个Intent
- Extras, Key-Value键值对数据,为完成这个Action时提供额外的数据,使用putExtras()
- Flags,当这个Component启动后,系统该如何处理这个Component,例如,是否把这个组件(Activity)加入到最近运行列表中,启动这个Activity时,是否把它放到task中或back task中等等。
Explicit Intent 示例
public class Activity2 extends Activity { /* * (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity2_main); }}
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /* * (non-Javadoc) * @see android.app.Activity#onStart() */ @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); // 启动Activity2 // intent.addCategory(Intent.CATEGORY_APP_BROWSER); Intent intent = new Intent(); intent.setClassName(this, "com.example.intentsample.Activity2"); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }}需要在manifest文件中声明Activity2
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.intentsample.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.intentsample.Activity2" > </activity> </application>
Implicit Intent 示例
下面代码来启动浏览器
Intent intent = new Intent(); intent.addCategory(Intent.CATEGORY_APP_BROWSER); intent.setAction(Intent.ACTION_MAIN); startActivity(intent);如果,要搜索关键字“Intent是什么东西?”,可以使用下面的代码
intent.setAction(Intent.ACTION_WEB_SEARCH);intent.putExtra(SearchManager.QUERY, "Intent是什么东西?");startActivity(intent);每个Intent的Action,Category是什么意思,可以查阅http://developer.android.com/reference/android/content/Intent.html ,很详细的说明,多看官方文档,好处多多,一有问题就百度来Google去,真不如认真细心地看下官方API
另外,如果没有可执行此Action的App或Activity,那么你的程序可能会崩溃,所以需要在startActivity()调用的时候判断一下,代码如下
intent.setAction(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "Intent是什么东西?"); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); }
0 0
- Intent是什么东西?
- ruby语言是什么东西?
- _beginthread是什么东西?
- Ajax是什么东西呢?
- 照片:Majoy是什么东西?
- Thumbs.db是什么东西
- 替代广告是什么东西
- __THROW是什么东西?
- cookie是什么东西?
- 这是什么东西
- ARM是什么东西?
- 市场是什么东西?
- 一句话:afx是什么东西?
- if 是什么东西啊
- if 是什么东西啊
- __THROW是什么东西?
- __THROW是什么东西?
- SSH是什么东西
- nginx 499
- 顺势而为
- struts2的国际化
- ndk
- 第9周项目1 求1000以内所有偶数的和
- Intent是什么东西?
- 冒泡排序
- 你看那里又有公交呦
- iOS获取开发设备唯一编号之开源代码SvUDIDTools
- Haar特征与积分图—概念解析
- 【转】hwcomposer dump layer的方法
- 适配iOS 8备忘录
- boost事件处理
- Android View绘制流程