显式和隐式Intent来启动活动

先看显式效果图跟代码:
这里写图片描述
这里我们用显式Intent打开了一个美国队长的活动,这里有个按钮用于换图。
布局文件就不放了哈,那些按钮初始化后,直接在onCreate()中为打开活动的按钮设置监听事件

btn_captainAmerica.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,C_Activity.class);
                intent.putExtra("NAME","美国队长");
                startActivity(intent);
            }
        });

以上是在主活动中完成,然后再创建一个名为C_Activity的活动用来换图和接收NAME

public class C_Activity extends AppCompatActivity {

    private Button btn_changer;
    private ImageView img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c_);

        setTitle("美国队长");
        String name = getIntent().getStringExtra("NAME");
        Toast.makeText(C_Activity.this,"我是"+name,Toast.LENGTH_LONG).show();
        /*这里定义一个Toast,第一个参数是上下文,第二个参数是Toast显示的文本内容,第三个是Toast显示的时长,最后一定要细心加细心,因为我常常会忘了加.show(),不然你会看不到文本内容*/
        btn_changer = (Button) findViewById(R.id.btn_changer);
        img = (ImageView) findViewById(R.id.img_s);
        btn_changer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                img.setImageResource(R.drawable.c2);
                //换图用到setImageResource()
            }
        });
    }
}

怎样?显示Intent是否easy,接下来就是隐式Intent了。

在onCreate中为运用隐式的按钮设置监听事件

btn_baidu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });

        btn_dial.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_DIAL);//出现一个打电话界面,需要手动拨打
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }
        });

        btn_call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_CALL);//直接打给114
                intent.setData(Uri.parse("tel:114"));
                startActivity(intent);
            }
        });

这里有四个简单的隐式,因为不用配置当前活动能够响应的action和category,我们来看第一个,首先指定了Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去。

隐式Intent有趣的是可以更精确地指定当前活动能够响应什么类型的数据。
打开AndroidManifest.xml在中的action和category,只有这两者的内容同时能匹配上Intent中指定的action和category时,这个活动才能响应该Intent。

我们创建一个按钮

btnEat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction("I_WANT_EAT");
                intent.addCategory("JIPAFAN");
                startActivity(intent);
            }
        });

为了有多个活动能响应这个隐式intent,我们创建两个Activity分别为ActitiyD和ActitiyC

public class ActitiyD extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_actitiy_d);
        setTitle("第二饭堂");
    }
}
public class ActivityC extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
        setTitle("第一饭堂");
    }
}

最后在AndroidManifest.xml中设置响应的事件

<activity android:name=".ActivityC" android:label="第一饭堂">
            <intent-filter>
                <action android:name="I_WANT_EAT"/>//与你所new的intent一致

                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:name=".ActitiyD" android:label="第二饭堂">
            <intent-filter>
                <action android:name="I_WANT_EAT"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="JIPAFAN"/>
            </intent-filter>
        </activity>

当你按下按钮时只有第二饭堂能响应,如果你想第一,第二饭堂都能响应,就把 intent.addCategory(“JIPAFAN”);去掉就行了
效果图:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值