Intent的使用方法和场景

Intent相当于组件之间通信的桥梁,使用它可以给其他的Activity和Service组建传递数据。Intent有显隐式之分,显式的Intent是根据组建的名称直接启动要启动的组建,如Service或者Activity,隐式的Intent通过配置的action, category, data来找到匹配的组件并启动。

一、显示Intent

两种载入的方式:

1、Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
      startActivity(intent);

2、也可以直接调用setComponent(ComponentName)或者setClass(Context, Class)方法来指定目标组件:

<span style="white-space:pre">	</span>Intent intent = new Intent();
	intent.setClass(MainActivity.this, NotificationActivity.class);
	startActivity(intent);
    或者
<pre name="code" class="java">				//包名和class名
				ComponentName componentName = new ComponentName("com.android", "com.android.activity.NotificationActivity");
				Intent intent = new Intent();
				intent.setComponent(componentName);
				startActivity(intent);

 
二、隐式Intent 

隐式Intent常用于调用系统组件,如打电话程序、发短信、打开浏览器、使用地图、安装程序、播放音频、发送短信和彩信、发送邮件等。

1、打开Web浏览器

<span style="white-space:pre">				</span>//调用系统组件,调用web浏览器
				Uri uri = Uri.parse("http://www.baidu.com");
				Intent intent = new Intent(Intent.ACTION_VIEW, uri);
				startActivity(intent);
2、显示地图。如果设备中已经安装了地图程序,就可以通过Intent启动,并且可以将屏幕移动到指定的经纬度位置:

				Uri uri = Uri.parse("geo:118.797684,32.062792");
				Intent intent = new Intent(Intent.ACTION_VIEW, uri);
				startActivity(intent);
3、调用拨号界面

				//调用拨号界面
				Uri uri = Uri.parse("tel:10086");
				Intent intent = new Intent(Intent.ACTION_VIEW, uri);
				startActivity(intent);
4、直接拨打电话

<span style="white-space:pre">				</span>//直接拨打电话[需添加打电话权限:android.permission.CALL_PHONE]
				Uri uri = Uri.parse("tel:10086");
				Intent intent = new Intent(Intent.ACTION_CALL, uri);
				startActivity(intent);
6、安装程序

<span style="white-space:pre">				</span>//首先准备a.apk文件到sdcard根目录,本段代码就会搜索到a.apk,然后让用户安装
				Intent intent = new Intent();
				intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				intent.setAction(android.content.Intent.ACTION_VIEW);
				intent.setDataAndType(Uri.fromFile(new File("/sdcard/a.apk")), "application/vnd.android.package-archive");
				startActivity(intent);
7、卸载程序

<span style="white-space:pre">				</span>//卸载程序
				Uri uri = Uri.parse("package:com.android");
				Intent intent = new Intent(Intent.ACTION_DELETE, uri);
				startActivity(intent);
三、Intent对象包含的内容

1.componentName(组件名称),指定Intent的目标组件的类名称。组件名称是可选的,如果填写,Intent对象会发送给指定组件名称的组件,否则也可以通过其他Intent信息定位到适合的组件。组件名称是个ComponentName类型的对象。

2.action(动作),指定Intent的执行动作,比如调用拨打电话组件。

Intent.ACTION_MAIN android.intent.action.MAIN标识Activity为一个程序的开始。比较常用
Intent.Action_CALL android.intent.action.CALL呼叫指定的电话号码,数据格式为:tel:+phone number
Intent.Action.DIAL action.intent.action.DIAL调用拨号面板
  
Intent.ACTION_VIEW      android.intent.action.VIEW      
用于显示用户的数据。

比较通用,会根据用户的数据类型打开相应的Activity。

比如 tel:13400010001打开拨号程序,http://www.g.cn则会打开浏览器等。

  

      3.data(数据),起到表示数据和数据MIME类型的作用。不同的action是和不同的data类型配套的,通过设置data的Uri来获得。

4.category(类别),被执行动作的附加信息。例如应用的启动Activity在intent-filter中设置category。

5.extras(附加信息),为处理Intent组件提供附加的信息。可通过putXX()和getXX()方法存取信息;也可以通过创建Bundle对象,再通过putExtras()和getExtras()方法来存取。

6.flags(标记),指示Android如何启动目标Activity,设置方法为调用Intent的setFlags方法。

	常用的Flags参数有:
	FLAG_ACTIVITY_NEW_TASK:根据Activity Affinity判断是否需要创建新的Task,然后再创建新的Activit实例放进去。 	FLAG_ACTIVITY_CLEAR_TOP
	FLAG_ACTIVITY_NO_HISTORY
	FLAG_ACTIVITY_SINGLE_TOP


四、Activity的四种加载模式
	Activity有四种加载模式:standard, singleTop, singleTask和singleInstance。在AndroidManifest.xml文件中配置android:launchMode的属性,如: android:launchMode="singleTask"。
	1、standard 是默认的加载模式,不需要配置launchMode。该加载模式每次 都会创建新的实例。
	2、singleTop 不是每次都会创建Activity实例,如果创建Intent的时候栈顶已经有要创建的Activity的实例,则直接将Intent发送给它,不会再创建新的实例。
	3、singleTask 和 singleInstance 模式都只创建一个实例,需要Activity的时候,系统会检查栈里面是否已将存在Activity的实例,如果有,就直接Intent发送给它。
	4、singleInstance 创建的Activity总是在顶部的栈顶,该Activity独占一格Task,其他的Activity不能存在于该Task中,然而一个singleInstance创建的Activity可以有其他的Activity在它上面叠加。以singleInstance模式启动一个新的Activity,新的Activity都会到新的Task里运行,如同加了FLAG_ACTIVITY_NEW_TASK参数。而除了singleInstance,另外三种模式则可以同其他Activity共存一个Task中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值