Android中Intent使用和IntentFilter通信

Intent是用来启动Android重要组件的工具,比如:Activity Service BroadcastReceiver
Intent对象大致包括:Component Action Category Data Type Extra Flag 这七个


首先是一个Component,我们想要说明一下component的作用:
我们知道Intent的启动方式有两种,

  1. 直接启动:指定了component属性的Intent。明确说明了它将要启动哪个组件,此时Intent中包含了足够的信息。
  2. 隐式启动:没有指定component属性,Intent没有明确指定要去启动哪个组件,所以会根据Intent指定的规则去启动符合条件的组件,具体是哪个组件不确定。

这里写一个例子来解释一下如何设置component属性

public class MainActivity extends AppCompatActivity {
    private Button bt1;
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);
        bt1 = (Button) findViewById(R.id.button_first1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                ComponentName comp = new ComponentName(MainActivity.this, second.class)
                Intent intent= new Intent();
                intent.setComponent(comp);
                startActivity(intent);
            }
        });
}

上面的代码:
创建一个ComponentName对象,接着把这个对象设置成Intent的属性。这样在点击这个按钮的时候回按照Intent的意图去启动指定的组件。
这些代码可以简化:

        Intent intent= new Intent(MainActivity.this, second.class);
        startActivity(intent);

Intent的构造器当中实际上已经提供了一个指定组件的方法。


Action、 Category属性
这两个属性都是一个普通的字符串,其中Action代表Intent要完成的一个抽象动作,这个抽象动作的结果,会产生什么,这个Action本身并不管。这七绝与Activity中的

    public class MainActivity extends AppCompatActivity {
    private Button bt1;
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);
        bt1 = (Button) findViewById(R.id.button_first1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                Intent intent= new Intent();
                intent.setAction(MainActivity.CRAZYIT_ACTION);
                startActivity(intent);
            }
        });
}

如果单单只是看上面的代码完全看不出来要启动哪个Activity,这取决于Activity配置中

<action android:name="...action.CRAZYIT_ACTION"/T>

需要说明:一个Intent对象只能有一个Action属性。Intent的setAction方法可以设置属性值。
而Category属性可以用addCategory方法来添加。当程序创建Intent时会自动调用CATEGORY_DEFAULT常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值