漫谈Intent启动Activity

隐式Intent是一个很基础的知识了,写法也一直很随意,今天看到一种写法,可以说是一种比较成熟的写法了,感觉还不错:

action标签:

首先我们来看Activity清单文件,主要就是内部的两个常用标签:第一个category:….DEFAULT,是标识这是一个Activity的;第二个action,是表明当前Activity能相应的action,name我们虽说可以随便起,但是有一个约定俗称的写法就是:包名+.intent.action.类名 。

<activity android:name=".WelcomeActivity_">
     <intent-filter>
          <category android:name="android.intent.category.DEFAULT" />
          <action android:name="com.jackson.llapp.intent.action.WelcomeActivity" />           
    </intent-filter>
</activity>

那么在这个Activity中可以声明一个全局的常量:

public static final String ACTION = "com.jackson.llapp.intent.action.WelcomeActivity"; 

而在其他Activity中可以省点事:

startActivity(new Intent(WelocmeActivity.ACTION));

这样可以启动,是不是看着舒服多了。

同时隐式Intent还有另外一个强大的功能那就是启动其他应用程序的Activity,其他程序在通过Intent来访问我们的WelcomeActivity的时候就不能这么省事了。

比如说上面的WelcomeActivity如果想限制只能本程序访问(隐式Intent)可以在android:name后面添加android:exported=”false”设置成不支持其他程序访问。

当不同的Activity注册了相同的action(针对隐式intent),当这个action被启动的时候,系统会弹出对话框,让用户选择,常常伴随着一个默认的单选框,以后再次启动这个action时,系统就会直接跳转到你选择作为默认的Activity,如果不小心点了这个选择框或是想更改这个默认的选择,可以在该应用的应用信息页中清除默认选择,后就可以再次选择。

data标签:

在Activity的intent-filiter过滤器中还可以添加data标签:

<activity android:name=".WelcomeActivity_">
     <intent-filter>
     ...
     <action android:name="com.jackson.llapp.intent.action.WelcomeActivity" />       
<data android:shame="app"/>

这里指明协议为“app”,若此时有其他Activity(同一程序或不同程序的Activity)也注册了相同的action,并未指明协议或是指明协议部位“app”时:如果在intent的构造方法中添加“app”相关协议

startActivity(new Intent("com.jackson.llapp.intent.action.WelcomeActivity",Uri.parse("app://helloworld")));

则启动该intent的时候只能启动指明“app”协议的Activity——WelcomeActivity。

当然还有其他打他选项例如host等等,这些等用的时候举一反三就ok了;

category 标签:

示例:通过浏览器链接访问本地Activity。

那么我们首先来注册这个Activity:

<activity android:name=".WelcomeActivity_">
     <intent-filter>
          <category android:name="android.intent.category.BROWSABLE" />
          <category android:name="android.intent.category.DEFAULT" />
          <action android:name="android.intent.action.VIEW" />    
          <data android:shame="app"/>       
    </intent-filter>
</activity>

接下来可以通过WebStrom来写一个Html页面:上添加一个链接:

这里写图片描述

用浏览器打开:

这里写图片描述

用Android模拟器访问这个页面:
需要做如下拼接:
可以通过10.0.2.2来访问主机的LocalHost;
然后将浏览器地址栏中的 :63343/myapp/index.html拼接在10.0.2.2后面即可访问刚写的html页面。
然后点击链接即可访问WelcomeActivity,
最后可以在Activity中通过getIntent().getData()获得Intent的第二个参数Uri—-app://helloworld

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章