在android中,不同的activity实例可能运行在一个进程中,也可能运行在不同进程中,因此我们需要一种机制帮助我们在activity之间传递消息。android中通过intent对象表示一条消息,一个intent对象不仅包含这个消息的目的地,还可以包含消息的内容。对于一个intent对象,消息的目的地是必须的,内容则是可选的。
一、显式intent
显式intent用法即之前在启动另一个activity时用到的
1、在onCreate()方法中创建intent对象:Intent I = new Intent(currentActivity,goleActivity.class);
2、启动另一个activity:startActivity(i);
【注】需要在AndroidManifest.xml中配置目标activity:<activityandroid:name="xxx"/>
二、隐式intent
隐式intent指:创建intent,且不指定被启动的activity
即在创建intent对象时,不指明目标activity,或者说目标activity是另一个app的activity
1、在AndroidManifest.xml中配置:
<activity
android:name=".Atv">
<intent-filter>
<action android:name="com.abc.xxx.intent.action.Atv"/> 约定成俗的格式:包名.intent.action.activity名称
<category android:name="android.intent.category.DEFAULT"/> DEFAULT意味着该intent的行为方式为一个activity
</intent-filter>
</activity>
2、在被启动的activity中添加静态常量:
public static finalACTION = "com.abc.xxx.intent.action.Atv";
3、在调用的activity的onCreate()的方法中:
startActivity(new intent(Atv.ACTION));
(1)若要启动其他app的activity,则在另一个app的activity中直接: startActivity(newintent("com.abc.xxx.intent.action.Atv"));
(2)若activity只允许其所在的app访问,不能被其他app访问,则
首先把AndroidManifest.xml中改为:
<activity android:name=".Atv" android:exported="false">//需要捕获异常
然后在onClick()方法中使用try-catch捕获异常:
try{
startActivity(newintent(Atv.ACTION));
}catch(Exception e){
Toast.makeText(….);
}
三、intent过滤相关选项
如果多个activity拥有同样的intent action,在启动时使用同一个action时,情况如何呢
1、再新建一个activity,在AndroidManifest.xml中配置,且action与之前使用的为同一个
2、启动这三个activity:
此时在主activity中,点击按钮后会出现 选择activity的对话框
也可通过在AndroidManifest.xml中配置:在<intent-filter>中加
<dataandroid:schema="app"/>
四、通过浏览器链接启动本地Activity
1、新建一个本地的activity
2、在AndroidManifest.xml中配置:
<activity
android:name=".LocalAtv">
<intent-filter>
<action android:name="android.intent.action.VIEW"/> 约定成俗的格式:包名.intent.action.activity名称
<category android:name="android.intent.category.DEFAULT"/> DEFAULT意味着该intent的行为方式为一个activity
<category android:name="android.intent.category.BROWSABLE"/>
<data android:schema="app"/>
</intent-filter>
</activity>
3、编写浏览器页面(WebStorm)
<ahref="app://hello">Launch my app</a>
4、在android浏览器中输入URL,点击链接即可启动本地的activity
5、在LocalAtv中通过intent获取到与其相关的对象:
Uri uri = getIntent.getData();//然后通过uri的get方法获取信息,本例中uri的内容为"app://hello"