Android自定义启动器startActivity()阻止BOOT

编程入门 行业动态 更新时间:2024-10-25 10:30:21
本文介绍了Android自定义启动器startActivity()阻止BOOT_COMPLETED意图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我目前正在开发自定义ROM(基于CyanogenMod 11.0),该ROM旨在实现自定义的信息亭模式".为此,我在一个应用程序中具有三个组件(具有系统特权):服务,该服务处理对状态/导航栏的修改并禁用电源键.接收器,仅在接收到BOOT_COMPLETED信号后才启动服务. HomeIntentWrapper用作启动器,并且仅启动一个自定义活动.

I am currently working on a custom ROM (based on CyanogenMod 11.0), which aims to implement a custom "Kiosk Mode". To do this, I have three components in one application (with system privileges): The service, which handles modifications to the status/navigationbar and disables the power key. The receiver, which only starts the service after the BOOT_COMPLETED signal is received. The HomeIntentWrapper works as the launcher, and only starts one custom activity.

我当前面临的问题是HomeIntentWrapper中的startActivity(...)命令以某种方式阻止了系统的任何进一步引导,并且BOOT_COMPLETED意图从未被发送.

The problem I am currently facing is that the startActivity(...) command in the HomeIntentWrapper somehow blocks the system from booting any further, and the BOOT_COMPLETED intent is never sent.

我用adb shell dumpsys activity命令验证了这一点,该命令告诉我:

I verifed this with the adb shell dumpsys activity command, which tells me:

mStartedUsers: User #0: mState=BOOTING

它也不显示曾经发送过的BOOT_COMPLETED广播.

It also does not show the BOOT_COMPLETED broadcast ever sent.

现在,如果用户按下Home-Button,则会发送BOOT_COMPLETED意图,并且mState切换到RUNNING.

Now, if the user presses the Home-Button, the BOOT_COMPLETED intent is sent, and the mState switches to RUNNING.

如果我没有在HomeIntentWrapper中开始活动,则发送意图.我在这里做什么错了?

If I do not start an activity in the HomeIntentWrapper, the intent is sent. What am I doing wrong here?

AndroidManifest.xml:

AndroidManifest.xml:

<manifest coreApp="true"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:persistent="true" > <service android:name="Service" android:process=":service" > </intent-filter> </service> <receiver android:name="Receiver" android:process=":receiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <activity android:name="HomeIntentWrapper" android:process=":launcher" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>

接收器:

public class Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { context.startService(new Intent(context, Service.class)); } }

HomeIntentWrapper:

HomeIntentWrapper:

public class HomeIntentWrapper extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startApp(); } @Override protected void onResume() { super.onResume(); startApp(); } private void startApp() { SharedPreferences sharedPrefs = getSharedPreferences(getString(R.string.settings_file), Context.MODE_MULTI_PROCESS); String customAppIntentString = sharedPrefs.getString(getString(R.string.settings_custom_intent), ""); if(customAppIntentString.equals("") == false) { try { Intent intent = Intent.getIntent(customAppIntentString); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } catch(java.URISyntaxException e) { // Intentionally } } } }

推荐答案

根本原因:因为Home Activity不在堆栈顶部,所以未调用finishBooting().

Root cause: finishBooting() is not called because Home Activity is not on top of stack.

androidxref/4.4.4_r1/xref/frameworks/base/services/java/com/android/server/am/ActivityStackSupervisor.java

行:1811 线:1883-1886 线:1934-1940

Line: 1811 Line: 1883-1886 Line: 1934-1940

解决方案:

在收到Boot_Completed之前,不要调用start活动.

Do not call start Activity Until Boot_Completed is received.

更多推荐

Android自定义启动器startActivity()阻止BOOT

本文发布于:2023-11-27 10:30:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637705.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:启动器   自定义   Android   startActivity   BOOT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!