安卓学习第二弹(第三发)Intent显式和隐式使用

1.显式使用
Intent是安卓程序中各个组件之间进行交互的一种重要方式,可以用于当前组件想要执行的动作,还可以在不同组件之间传递数据。一般用于服务,广播,启动活动。
启动活动:Intent有很多方法重载,启动活动可以使用:Intent(Context packageContext,Class<?>cls)第一个参数要求提供启动活动的上下文,第二个参数指定想要启动的目标活动,Activity类提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接受一个Intent参数,将构建好的Intent传入即可:代码如下:

public void onClick(View v) {
               Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
               startActivity(intent);

            }

2.隐式使用
相比较显式的使用,隐式则要含蓄很多,它不明确指定我们需要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交给Intent并帮助我们找出合适的活动去启动。
那么什么叫合适的活动???简单的说就是可以响应我们这个隐式Intent的活动之前所提到的SecondActivity似乎什么隐式都响应不了,尴尬~~因此我们需要在AndroidManifest.xml文件中添加如下代码:

  <activity android:name=".SecondActivity">
 <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" /> 
                </intent-filter>

在标签中,我们指定当前活动(就是.SecondActivity)可以响应action为"com.example.activitytest.ACTION_START" 而标签则包含一些附加信息,更精确的指明了当前活动能够响应的Intent中还可能带有的category,只有和中的内容能够同时匹配Intent只指定的action和category这个活动才可以响应该Intent。
修改FirstActivity中按钮事件,代码如下:

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View){
Intent intent  = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
}
}

在这里我们使用Intent的一个构造函数,直接将action字符串传进去,表面我们想要启动能够响应com.example.activitytest.ACTION_START这个action的活动,之前我们有讲到必须action和category同时匹配才可以响应,在这里因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()这个方法时,会自动将category加入到Intent中去;此外每个Intent中只能指定一个action却同时可以指定多个category,可以通过addCategory来指定,但是必须在AndroidManifest.xml中添加一个category不然无法响应你添加的category程序会崩溃。
3.更多的隐式使用:
使用隐式Intent不仅可以启动自己程序的活动,还可以启动其他程序的活动,这使得安卓多个应用程序之间共享成为了一种可能,比如:你的应用程序需要展示一个网页,只需要调用系统的浏览器来打开这个网页即可,(而不用自己去实现一个浏览器,这也不太可能啊)具体实现代码如下:

 button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
			Intent intent  = new Intent( Intent.ACTION_VIEW);
			intent.setDate(Uri.parse("http://www.baidu.com"));
			startActivity(intent);


}
});

在这里我们指定了Intent的action是Intent是Intent.ACTION_VIEW,这是安卓系统内置动作,然后通过Uri.parse()方法网址字符解析成一个Uri对象,再调用setDate方法将这个Uri对象传递进去,重新运行程序就可以看到百度页面了。因此同时:我们还可以在标签中来再配置一个标签用于更加精确的指定当前活动可以响应什么类型的数据,
标签主要可以配置一下内容:

  • android:scheme 用于指定数据协议部分。如上述中的http部分。
    android:host 用于指定数据的主机名部分,如上述中的www.baidu.com部分
    android:port 用于指定数据的端口部分一般紧随在主机名之后
    android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
    android:mimeType 用于指定可以处理的数据类型,允许通过通配符的方式来指定

只有标签中指定的内容和Intent中携带的Date完全一致,当前活动才可以响应该Intent
除了http协议外,我们还可以指定其他协议,如geo表示显示地理位置,tel表示拨打电话,

button1.setonClickListener(new View.onClickListener(){
@Override
public void onClick(View v){
Intent intent  = new Intent(Intent.ACCTION_DIAL);
intent.setDate(Uri.parse("tel:10086"));
startActivity(intent);
}});

首先我们指定Intent的action为Intent.ACCTION_DIAL,这也是安卓系统内置的动作,然后date部分指定的协议是tel 重新运行程序,点击按钮会看到如下页面:
运行图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值