当前位置: 首页 > article >正文

Android学习21 -- launcher

1 前言

之前在工作中,第一次听到launcher有点蒙圈,不知道是啥,当时还赶鸭子上架去和客户PK launcher的事。后来才知道其实就是安卓的桌面。本来还以为很复杂,毕竟之前接触过windows的桌面,那叫一个复杂。。。

后面查了一下,Android的桌面倒是没那么复杂,本质其实就是一个App,系统启动之后跑起来的第一个app。

Android Launcher 是一个应用程序,用于显示设备的主屏幕,并且是启动其他应用的入口。简单来说,Launcher 是 Android 设备的“应用启动器”,负责管理和展示设备的主屏幕、应用图标、桌面小部件(widgets)以及应用程序的启动行为。

2 操作步骤

最近搭建了app的环境,现在借着之前搭建的环境(Android学习20 -- 手搓App2(Gradle)-CSDN博客),试着弄一个launcher。

*   The key to making your app a launcher is to declare the correct intent filter in your `AndroidManifest.xml` file. This tells the Android system that your app is capable of acting as a launcher.
*   Here's how your `AndroidManifest.xml` should look (specifically the `<activity>` tag for your

所以修改之后的AndroidManifest.xml是这样。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.simpleapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="SimpleApp"
        android:theme="@style/Theme.AppCompat.DayNight">
        
        <activity
            android:name=".MainActivity"
            android:label="SimpleApp">
            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
        	    <category android:name="android.intent.category.HOME" />
        	    <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            
        </activity>
    </application>
</manifest>

最核心的就是在intent filter里面的配置,重点就是这几行。

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

 * **Explanation:** *

`<action android:name="android.intent.action.MAIN" />`: This is the standard action for the main entry point of an app. * `

<category android:name="android.intent.category.LAUNCHER" />`: This category indicates that this activity should be listed in the app launcher (the list of apps). * `

<category android:name="android.intent.category.HOME" />`: This is the crucial category that tells the system this activity can act as a home screen replacement. * `

<category android:name="android.intent.category.DEFAULT" />`: This category is often used with `HOME` to ensure your app is considered a valid home screen option. * 

MainActivity.java。主界面上面就是一个按钮,点了之后会启动一个浏览器。

package com.example.simpleapp;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取按钮控件
        Button openBrowserButton = findViewById(R.id.openBrowserButton);
        
        // 设置按钮点击事件
        openBrowserButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 启动浏览器
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com"));
                startActivity(browserIntent);
            }
        });
    }
}

这里就实现了前面说的启动应用程序的功能,就是通过startActivity(browserIntent);

之后要指定布局,也就是res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <!-- 启动浏览器按钮 -->
    <Button
        android:id="@+id/openBrowserButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Open Browser" />
</LinearLayout>

编译用之前调好的就行。

gradle wrapper
gradlew assembleDebug

编译的时候会报错,说mipmap,drawable找不到。

可以去Android Studio创建好的工程里面拷贝过来。完了大概是这样的。里面也就是一堆xml。

之后就可以顺利编过,安装也比较简单。直接运行就是这样:

3 未能最终完成。。

但是有一点很遗憾,在荣耀的平板里面,这个是叫做桌面。自己做的这个launcher,怎么都没法设置进去。除了默认的华为桌面,找不到可以设置的地方。

查了一下,有可能是我的设置还有点问题,但是大概率还是华为的平板把这部分的权限给关了。估计只有以后找一个干净的AOSP再试试了。。。 


http://www.kler.cn/a/532070.html

相关文章:

  • VSCode设置内容字体大小
  • 《DeepSeek R1:7b 写一个python程序调用摄像头获取视频并显示》
  • Android学习制作app(ESP8266-01S连接-简单制作)
  • potplayer字幕
  • JavaScript系列(54)--性能优化技术详解
  • OpenAI 实战进阶教程 - 第二节:生成与解析结构化数据:从文本到表格
  • 设计一个特殊token以从1亿词表中动态采样8192个词来表达当前序列
  • CSS工程化概述
  • MFC程序设计(八)动态创建机制
  • mysql不同种类时间字段的区别
  • Linux ifstat 命令使用详解
  • qt-Quick笔记之Dark Mode And Light Mode In Application
  • 应对现代电子商务的网络威胁—全面安全战略
  • (脚本学习)BUU18 [CISCN2019 华北赛区 Day2 Web1]Hack World1
  • 自制小动画
  • 基于开源2 + 1链动模式AI智能名片S2B2C商城小程序的内容创作与传播效能探究
  • ubuntu 网络管理--wpa_supplicant、udhcpc
  • Block Blaster Online:免费解谜游戏的乐趣
  • 如何不更新application.yml而更新spring的配置
  • 解读“大语言模型(LLM)安全性测评基准”
  • 蓝桥杯备考:高精度算法之乘法
  • Maven 概述与安装配置
  • 网络安全学习 day4
  • 物业管理平台系统促进智能社区管理与服务模式的创新与发展
  • 站在JavaScript的视角去看,HTML的DOM和GLTF的Json数据。
  • < 自用文儿 > 下载 MaxMind GeoIP Databases 对攻击的 IP 做 地理分析