Android 引导后广播接收器不工作
我已经创建了一个应用程序,它将接收来自firebase的通知,因此希望在用户启动手机后启动应用程序服务,这样他们就不需要再次手动启动应用程序。然而,广播接收器似乎就是不工作 AndroidManifest.XMLAndroid 引导后广播接收器不工作,android,broadcastreceiver,Android,Broadcastreceiver,我已经创建了一个应用程序,它将接收来自firebase的通知,因此希望在用户启动手机后启动应用程序服务,这样他们就不需要再次手动启动应用程序。然而,广播接收器似乎就是不工作 AndroidManifest.XML <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.simplifie
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.simplifiedcoding.firebasecloudmessaging">
<!-- Adding Internet Permission -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--
Defining Services
-->
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<service android:name=".NotificationService"/>
<receiver android:name=".Broadcast" android:exported="true" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
我已经检查了以下内容
我是做错了还是还遗漏了什么?我必须把它称为MainActivity吗?我怀疑我应该这样做?非常感谢任何指导。得到了解决方案,这是一个非常愚蠢的理由 我正在使用Oppo的手机进行测试,Oppo有自己的Security Manager应用程序,您必须手动允许特定应用程序在启动后自动启动。就这些 我怀疑大多数android手机也有这个功能,因此请记住检查是否有这样的应用程序,如果有,然后提醒用户在重新启动手机之前允许Security Manager应用程序中的应用程序,并且不能使用您的应用程序提供的任何服务
希望这有帮助 试试这个,它对我很管用
<receiver android:enabled="true" android:name=".Broadcast"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
摆脱Toast
方法之外的onReceive()
方法,并确保在安装后至少手动启动一次应用程序,使其脱离停止状态。您还可以删除if
,因为它不是必需的,如果这就是您使用该Receiver类的全部目的。@MikeM。谢谢你的帮助。onReceive()方法之外的Toast只是这里的一个输入错误,它应该在if语句之外。我已经根据你的建议更新了问题,但仍然不起作用。Toast消息从未出现。请确保
的名称正确;正如您现在看到的那样,Broadcast
类应该与MainActivity
位于同一个包/文件夹中。另外,检查日志,看看在启动过程中是否有任何故障,如果你确定安装后自己已经运行过一次应用程序。仍然无法使其工作。我甚至尝试过编写一个非常简单的应用程序,就像在这个链接中教的那样,但仍然不起作用。我还在实际的手机上安装并试用了这些应用程序。嗯,那个教程已经过时了。从3.1开始,您必须在安装后至少启动一次活动
,否则您的启动接收器将无法播放。您的main活动
至少工作正常吗?除此之外,很难说。你发布的内容本身是正确的;i、 例如,所有内容似乎都拼写正确,并且在清单中的正确位置,等等。您可以尝试清理/重建您的项目,暂时从接收方移除服务
内容,再次检查接收方类的位置,等等。它已经工作了,并将我的解决方案留在下面。这是由于电话设置而不是androidmanifest。
<receiver android:enabled="true" android:name=".Broadcast"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>