Launcher与普通Activity的区别

本文深入探讨了Android应用中Intent机制的运作原理,包括Intent Filter的构成、Intent的使用方式,以及如何通过Intent实现应用的启动、服务的启动、广播的发送与接收。文章详细解释了action和category的作用,并提供了实例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.    Intent-Filter

         <intent-filter>

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

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

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

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

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

        </intent-filter>
    android.intent.action.MAIN决定应用程序最先启动的Activity

    android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

    当Intent通过startActivity被传递出后,Android系统会找到适合的activity去响应这个intent。

    与此类似,startService,sendBroadcast之后都会由Android去寻找对应的程序。

    一个Intent对象是一个信息包。它包含了要接收此Intent的组件需要的信息(例如需要的动作和动作需要的信息)和 android 系统需要的信息(要处理此Intent的组件的类别和怎样启动它)

    主要用来指明Activity,Service, Broadcast Receiver可以响应哪些隐式intents。

action

    一个字符串,代表要执行的动作。如果学过Structs2的同学应该不会陌生,所谓的action就是发送一个特定的请求,然后,由一个符合这个请求的activity响应。Intent类中定义了许多动作常量。如下:

常量

目标组件

Action

ACTION_CALL

activity

初始化一个电话呼叫

ACTION_EDIT

activity

显示用户要编辑的数据

ACTION_MAIN

activity

将该Activity作为task的第一个Activity ,没有数据输入,也没有数据返回

ACTION_SYNC

activity

在设备上同步服务器上的数据

ACTION_BATTERY_LOW

broadcast receiver

电量不足的警告

ACTION_HEADSET_PLUG

broadcast receiver

耳机插入设备,或者从设备中拔出

ACTION_SCREEN_ON

Broadcast receiver

屏幕已经点亮

ACTION_TIMEZONE_CHANGED

Broadcast receiver

时区设置改变

category

    一个字符串, 包含了处理该Intent的组件的种类信息, 起着对action的补充说明作用。

    一个Intent对象可以有任意多个 category。和action 一样, 在Intent class 中也定义了几个 category 常量。。 如下:

Constant

Meaning

CATEGORY_BROWSABLE

目标Activity可以使用浏览器显示数据

CATEGORY_GADGET

The activity can be embedded inside of another activity that hosts gadgets.

该activity可以被包含在另外一个装载小工具的activity中.

CATEGORY_HOME

The activity displays the home screen, the first screen the user sees when the device is turned on or when the HOME key is pressed.

CATEGORY_LAUNCHER

可以让一个activity出现在launcher

CATEGORY_PREFERENCE

该activity是一个选项面板

CATEGORY_DEAULT

该activity是否可以接收到隐式Intents。说明除了程序入口点的filter不需要包含DEFAULT之外,其余所有的activity都要包含DEFAULT;因为如果那些activity不包含DEFAULT,将无法接收到主Activity的任何调用命令。 如SecondActivity中必须包含包名和DEFAULT的category.

注意
A.任何一个需要隐式启动的Activity都必须要有这项:
category android:name="android.intent.category.DEFAULT"
例外情况是:
android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题
B. 当匹配不上任何Activity的话,会发生异常,跳出对话框:很抱歉...某某应用程序意外停止,请重试。
 

2.    普通的Activity

 <intent-filter>

<!-- The MAIN action describes a main entrypoint into an

                     activity, without anyassociated data. -->

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

 

<!-- This places this activity into the main app list. -->

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

</intent-filter>


    其中的MAIN表示这是该应用启动的第一个Activity, 而LAUNCHER表示此应用将被加载到Launcher的应用程序列表中. 

3.   Launcher的特殊处

Launcher的intent-filter是这样的,

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

<categoryandroid:name="android.intent.category.HOME"/>

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

<categoryandroid:name="android.intent.category.MONKEY"/>
    这个Activity是系统启动后要执行的第一个Activity. 在你的Activity的AndroidManifest.xml中加入这几个过滤条件, 你的应用就能取代Launcher的位置了.

    HOME表示该Activity可以作为Launcher, 即系统的第一个应用.

4. Launcher在系统中的调用过程



 

 

 

 

将一个普通的Android应用APK变成Launcher(启动器),通常需要创建一个Activity并且将其设置为Home Activity,这是为了让用户点击图标时直接启动你的应用并显示主屏幕。以下是基本步骤: 1. **修改AndroidManifest.xml**: - 将原来的应用`<activity>`标签设置为`<application>`的一部分,并添加`android.intent.category.LAUNCHER`属性,表示这是一个可以作为启动器的活动。 ```xml <manifest ...> ... <application ... android:name=".YourAppName" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:name=".YourMainActivity" android:launchMode="singleTask" android:exported="true" android:configChanges="orientation|screenSize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> ... </manifest> ``` 2. **创建主屏幕界面(如果需要)**: - 如果你想提供自定义的启动屏幕,创建一个新的Activity并在`<activity>`标签中配置它,然后在`<intent-filter>`中添加适当的类别。 3. **打包Apk**: - 使用Android Studio或第三方工具(如Apktool、JADX等)对更新后的Manifest文件和资源进行编译,生成新的APK。 4. **安装测试**: - 测试新生成的APK是否可以在Android 5.1设备上正常安装并作为启动器运行。 请注意,这适用于旧版本的API(比如5.1),现代系统可能会有额外的安全限制和推荐的做法,例如使用Shortcut(快捷方式)代替。另外,确保你的应用已经获得了相应的权限,如访问桌面系统的权限。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值