Android组件 Activity的显式启动与隐式启动详解

显式启动Activity:

显式启动比较简单,首先创建一个Intent,指定应用程序上下文和需要启动的Activity,然后调用startActivity来启动新的Activity。

<!--AndroidManifest.xml-->
<activity android:name=".SecondActivity"></activity>
//启动Activity
Intent it = new Intent(this, SecondActivity.class);
startActivity(it);

隐式启动Activity:

打开AndroidManifest.xml查看里面的代码,在学习隐式启动Activity前需要了解<intent-filter>里的参数。

<action android:name="android.intent.action.MAIN"/>

  • Activity的别名,可以修改自己Activity的名称
  • android.intent.action.MAIN决定应用程序最先启动的Activity

<category android:name="android.intent.category.DEFAULT"/>

  • 给Activity进行分组,可以自己添加一个组别
  • 一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中
  • 如果自己定义的某个Activity要通过隐式启动,在AndroidManifast.xml必须加上android.intent.category.DEFAULT,否则不起作用

<category android:name="android.intent.category.LAUNCHER"/>

  • android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
    (想要App隐藏图标,去掉LAUNCHER,或者使用DEFAULT即可)
    在这里插入图片描述
  • 如果一个应用多个Activity都设置了这个参数,则程序列表里会显示多个该应用Activity的图标

1.通过Activity的别名隐式启动

<activity android:name=".SecondActivity">
    <intent-filter>
        <!--取别名-->
        <action android:name="com.example.test.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>

    </intent-filter>
</activity>
//隐式启动系统Activity
//参数1:字符串(某Activity的别名)
Intent it = new Intent("com.example.test.ACTION_START");  
startActivity(it);

2.通过别名和自定义的种类隐式启动

<activity android:name=".SecondActivity">
    <intent-filter>        
    	<action android:name="com.example.test.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="com.example.test.MY_CATEGORY"/>
    </intent-filter>
</activity>
Intent it = new Intent("com.example.test.ACTION_START");  
//添加自定义的种类
intent.addCategory("com.example.test.MY_CATEGORY");
startActivity(it);

3.根据用户的数据类型打开相应的Activity
Intent.ACTION_VIEW是Android系统内置的一个动作,通过Uri.parse()方法解析后,再调用Intent.setData()方法将这个Uri对象传递进去

Intent it = new Intent("Intent.ACTION_VIEW");  
it.setData(Uri.parse("https://www.baidu.com"));
startActivity(it);

//参数1:字符串(某Activity的别名)
//参数2:打开的路径,通过协议来具体的确定打开什么Activity
Intent it2 = new Intent("Intent.ACTION_VIEW", Uri.parse("https://www.baidu.com")); 
startActivity(it2);

Intent it3 = new Intent("Intent.ACTION_DIAL", Uri.parse("tel:18812341234")); 
startActivity(it3);

4.响应用户指定的数据类型

<activity android:name=".SecondActivity">
    <intent-filter tools:ignore="AppLinkUrlError">        
    	<action android:name="com.example.test.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="https">
    </intent-filter>
</activity>

这里我们通过android:scheme指定了数据的协议必须的https协议,这样此Activity就能和浏览器一样,响应一个打开网页的Intent了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值