我知道这已被问过很多次了,互联网上有数百个例子,但我想了解我的代码中有什么问题。 由于标题建议我想在手机打开时执行一些代码,特别是我想设置一些警报来获取通知,但现在不相关,我的问题是启动接收器onReceive方法从未被调用
我在清单中拥有正确的权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
我还在清单中注册了接收器
<receiver
android:name=".BootBroadcastReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
我已经创建了接收器类
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context pContext, Intent intent) {
Toast.makeText(pContext,"waiting for debugger",Toast.LENGTH_LONG).show();
android.os.Debug.waitForDebugger();
//Stuff for the alarms
}
}
有人可以解释一下,如果我没有张贴总是与我到处看到的相同的例子,我会失败吗? 我想知道我的代码有什么问题,而不是应该怎么做。
PS::我忘了说我需要停止调试警报的代码,但我不认为这是问题,因为它甚至没有显示Toast。 更新:完整清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="feddycapdev.conapo.turnario" >
<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:theme="@style/AppTheme" >
<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>
<activity
android:name=".Calendario"
android:label="@string/title_activity_calendario"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".Settings_Activity"
android:label="@string/title_activity_settings_" >
</activity>
<activity
android:name=".SettingGiorno"
android:label="@string/title_activity_setting_giorno" >
</activity>
<receiver
android:name=".BootBroadcastReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:enabled="true" android:name=".WebNotificChecker" />
<service android:enabled="true" android:name=".Sveglia" />
<service android:enabled="true" android:name=".NotificaVigilanza" />
</application>
</manifest>
答案 0 :(得分:1)
我应该在接收器之前运行活动吗?
在任何清单注册的接收器工作之前,必须使用显式Intent
来启动应用程序的某个组件。对于99%的Android应用程序,这意味着用户必须从主屏幕启动您的应用程序。如果您的应用程序作为其他应用程序的插件,您可能不需要该活动 - 请与将托管您的插件的应用程序的开发人员讨论。
如果用户未打开活动,如何设置通知?
如果用户未打开活动,则不会设置通知。您的应用只会在用户允许您运行时运行。如果用户选择不启动您的应用程序,或者用户选择从“设置”中“强制停止”您的应用程序,则您的清单注册的接收者将不会收到广播。