Intent是什么东西?

Intent,中文意思为意图,就是说你想要干什么,然后把这个意思传递给其它组件,这个组件帮你完成你的意图。Intent作为一个消息对象被传递给Android组件,作为组件之间沟通的桥梁。

Intent有三个方面的用途:

  1. 启动Activity
  2. 启动Service
  3. 传递broadcast
Intent的类型
  1. Explicit intents  通过显示式的class name启动
  2. Implicit intents 通过要完成的Action启动,系统会根据manifest中每个组件注册的intent filters来决定启动哪一个组件完成这个Action任务
创建Intent
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值