Android-设置APP开机自启和隐藏导航栏/状态栏方法

本文适用于触觉智能所有支持Android11系统的开发板设置APP开机自启和隐藏导航栏/状态栏。触觉智能的Purple Pi OH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。

图片

图片

该主板主要针对学生党,极客,工程师,极大降低了开源鸿蒙开发者的入门门槛,具有以下几点优势:

  • 支持开源鸿蒙/Linux /Andriod 11/麒麟,兼容树莓派 ;

  • 四核A55,最高1.8G主频,Mali G52-2EE GPU ;

  • 支持OpenGL/CL/Vulkan/1T NPU/8M ISP ;

  • 支持TensorFlow/MXNet/PyTorch/ Caffe ;

  • 支持1*千兆以太网、3*USB2.0、1*USB3.0、3*UART、2*SPI、2*I2C、28*GPIO、1*MIPI DSI、1*HDMI ;

  • 支持OpenHarmony3.2/4.0/4.1版本,开放SDK源代码 ;

  • 活跃的开发者社区, 更多牛人在线技术支持 ;

一、APP自启

1.1 添加自启服务

修改文件:

frameworks\base\core\java\com\android\internal\app\ResolverActivity.java

-- a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
+++ b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
@@ -101,6 +101,10 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Set;

+import java.util.concurrent.Executor;
+import java.util.function.Consumer;
+import android.os.SystemProperties;
+import android.app.role.RoleManager;

 /**
  * This activity is displayed when the system attempts to start an Intent for
@@ -341,6 +345,18 @@ public class ResolverActivity extends Activity implements
     protected void onCreate(Bundle savedInstanceState, Intent intent,
             CharSequence title, int defaultTitleRes, Intent[] initialIntents,
             List<ResolveInfo> rList, boolean supportsAlwaysUseOption) {
+
+               //by Lyle,220923
+               String LauncherPkg = SystemProperties.get("persist.sys.def_launherpag");
+        if(LauncherPkg!=null/* && !isDefaultLauncher(this,LauncherPkg)*/){
+            Log.v("defaultLauncher","-----found default launcher pkg:"+LauncherPkg);
+            setDefaltLauncher(this,LauncherPkg);
+            startDefaultLauncher(this,LauncherPkg);
+            finish();
+            return;
+        }
+               //end
+
         setTheme(appliedThemeResId());
         super.onCreate(savedInstanceState);

@@ -433,6 +449,47 @@ public class ResolverActivity extends Activity implements
                 intent.getAction() + ":" + intent.getType() + ":"
                         + (categories != null ? Arrays.toString(categories.toArray()) : ""));
     }
+
+
+       public void setDefaltLauncher(Context context, String packageName) {//by Lyle,220923
+        String roleName = "android.app.role.HOME";
+        boolean add = true;
+        int flags = 0;
+        UserHandle user = android.os.Process.myUserHandle();
+
+        RoleManager roleManager = context.getSystemService(RoleManager.class);
+        Executor executor = context.getMainExecutor();
+        Consumer< Boolean > callback = successful -> {
+            if (successful) {
+                Log.v("defaultLauncher","set Defalt Launcher successful" );
+            } else {
+                Log.v("defaultLauncher","set Defalt Launcher failed ");
+            }
+        };
+        roleManager.addRoleHolderAsUser(roleName, packageName, flags, user, executor, callback);
+    }
+
+    public void startDefaultLauncher(Context context, String packageName) {
+        Intent intent = new Intent();
+        PackageManager pm = context.getPackageManager();
+        intent = pm.getLaunchIntentForPackage(packageName);
+        if (intent != null)
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        try {
+            context.startActivity(intent);
+        } catch (Exception e) {
+            Log.v("defaultLauncher","start Default Launcher failed,not find package:"+packageName );
+        }
+    }
+
+       public boolean isDefaultLauncher(Context context,String launcherPkg){
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory(Intent.CATEGORY_HOME);
+        ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
+        String currentHomePackage = resolveInfo.activityInfo.packageName;
+        Log.v("defaultLauncher","-currentHomePackage:"+currentHomePackage);
+        return launcherPkg.equals(currentHomePackage);
+    }

     private boolean isIntentPicker() {
         return getClass().equals(ResolverActivity.class);

1.2 添加APP

将需要自启的APP放置

device/rockchip/rk356x/rk3566_r/preinstall_del/目录下

(没有preinstall_del目录就手动创建一个即可),并添加以下文件:

  1. Android.mk

  2. xxx.apk(APP)

  3. preinstall.mk

Android.mk文件内容:

include $(call all-subdir-makefiles)

preinstall.mk文件内容:

PRODUCT_PACKAGES += neu

注意:

  1. neu为APP名字,例如neu.apk。

  2. 该目录也是APK的预安装目录,如果有新的APK要预安装,可把APK拷贝到preinstall_del/目录下,并且把APK名字添加到preinstall.mk文件即可。

1.3 添加APP包名

修改文件:

device/rockchip/rk356x/rk3566_r/rk3566_r.mk

例如包名为:

com.mdptech.neuronappandroidhu

包名命令行方


--- a/device/rockchip/rk356x/rk3566_r/rk3566_r.mk
+++ b/device/rockchip/rk356x/rk3566_r/rk3566_r.mk
@@ -46,4 +46,5 @@ PRODUCT_PROPERTY_OVERRIDES += persist.bt.power.down=true
 PRODUCT_PROPERTY_OVERRIDES += persist.sys.timezone=Asia/Shanghai
 PRODUCT_PROPERTY_OVERRIDES += ro.vendor.hdmirotationlock=true
 #PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=HDMI-A-1
PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI
+PRODUCT_PROPERTY_OVERRIDES += persist.sys.def_launherpag=com.mdptech.neuronappandroidhu

包名命令行方式查看:pm list package -3,修改后 make 编译源码即可。

二、修改导航栏/状态栏

2.1 导航栏

修改文件:

frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml

-- a/frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml
@@ -22,6 +22,7 @@
     xmlns:systemui="http://schemas.android.com/apk/res-auto"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
+       android:visibility="gone"
     android:background="@drawable/system_bar_background">

     <com.android.systemui.CornerHandleView
@@ -42,6 +43,7 @@
     <com.android.systemui.statusbar.phone.NavigationBarInflaterView
         android:id="@+id/navigation_inflater"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
+        android:layout_height="match_parent"
+               android:visibility="gone"/>

 </com.android.systemui.statusbar.phone.NavigationBarView>

2.2 状态栏

修改文件:

frameworks/base/packages/SystemUI/res/layout/status_bar.xml

--- a/frameworks/base/packages/SystemUI/res/layout/status_bar.xml
+++ b/frameworks/base/packages/SystemUI/res/layout/status_bar.xml
@@ -26,6 +26,7 @@
     android:id="@+id/status_bar"
     android:orientation="vertical"
     android:focusable="false"
+    android:visibility="gone"
     android:descendantFocusability="afterDescendants"
     android:accessibilityPaneTitle="@string/status_bar"
     >

修改后重新make编译即可。

End

Purple Pi OH已过XTS兼容性认证

图片

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Industio_触觉智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值