gpt4 book ai didi

android - 如果应用程序已经运行(Android 模拟器、Lollipop),则仅捕获 BOOT_COMPLETED 广播

转载 作者:行者123 更新时间:2023-11-29 00:08:22 28 4
gpt4 key购买 nike

请帮我弄清楚为什么我的应用程序没有收到 BOOT_COMPLETED 广播消息,除非我的应用程序已经在运行。

我的目标是让我的应用程序在设备完成启动后立即自动启动(启动我的 GUI)。我的方法是捕获 BOOT_COMPLETED 广播,然后从 onReceive() 方法内部开始我的主要 Activity 。

问题是我的应用只有在运行时才会捕获 BOOT_COMPLETED 广播。我期望操作系统启动我的应用程序进程并在发送 BOOT_COMPLETED 广播时调用 onReceive() 入口点。有人可以帮我弄清楚我哪里出错了吗?我想我的错误可能出现在我的 AndroidManifest.xml 文件中,但我不确定我遗漏了什么(我的第一个 Android 项目)

我在 Nexus 5 上使用 Android Studio 模拟器 Lollipop。模拟器在启动时设置为“不启动 Activity ”,因为这是真实硬件的工作方式。

我正在像这样向模拟器发送广播,如果我的应用程序已经在运行,我会捕捉到它:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.example.matt.catchbootcompletebroadcast

我的猜测是我的问题出在我的 list 文件中,这里是 (AndroidManifest.xml):

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.matt.catchbootcompletebroadcast" android:installLocation="internalOnly">

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<receiver android:name=".BootCompleteReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

这是我的 onReceive 类:

    package com.example.matt.catchbootcompletebroadcast;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import android.util.Log;


/**
* Created by matt on 8/20/2015.
* To send broadcast: adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.example.matt.catchbootcompletebroadcast
*/
public class BootCompleteReceiver extends BroadcastReceiver
{
@Override public void onReceive(Context context, Intent intent)
{
Log.d("ReceivedABroadcast", "Received A Broadcast");
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
Log.d("ReceivedBootCompleted", "Received BOOT_COMPLETED broadcast");
}
// Open the main activity to this application
Intent startApp = new Intent(context, MainActivity.class);
context.startActivity(startApp);
}

}

非常感谢所有提示!

最佳答案

一些想法:

尝试在 Android 设备上启动它。如果这不起作用,请尝试以下操作:在 <receiver> 的 Android list 文件中标签删除 enabledexported部分。在 Receiver 类中删除 if声明。

原因:因为你已经过滤了广播接收者if接收到的intents声明几乎没有用。如果所有这些都不起作用,这可能会对您有所帮助:Android 声明以下操作必须仅以编程方式编写。我相信该列表包含 intent.action.BOOT_COMPLETED因此,如果您以编程方式声明接收者,它可能会起作用。对我来说它看起来不错。但我想这些想法可能值得一试。

关于android - 如果应用程序已经运行(Android 模拟器、Lollipop),则仅捕获 BOOT_COMPLETED 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129927/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com