BootReceiver 不工作
BootReceiver doesen't work
我知道这个问题已被问过很多次,互联网上有数百个示例,但我想了解我的代码中有什么问题。
正如标题所示,我想在 phone 打开时执行一些代码,特别是我想设置一些警报以获取通知,但现在不相关,我的问题是启动接收器 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>
并且我已经创建了接收器 class
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: :我忘了说我需要停止调试警报的代码,但我认为这不是问题,因为它甚至不显示吐司。
更新: 完整清单
<?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>
I should run the activity before the receiver?
必须使用明确的 Intent
来启动您的应用程序的组件之一,然后清单注册的接收器才能工作。对于 99% 的 Android 应用,这意味着用户必须从主屏幕启动您的应用。如果您的应用程序作为其他应用程序的插件,您可能不需要 activity — 请与将托管您的插件的应用程序的开发人员讨论这个问题。
how can I set notification if the user doesn't open activity?
如果用户不打开 activity,则不会设置通知。只有当用户允许您 运行 时,您的应用才会 运行 。如果用户选择不启动您的应用程序,或者如果用户选择从“设置”中 "Force Stop" 您的应用程序,您的清单注册接收器将不会接收广播。
我知道这个问题已被问过很多次,互联网上有数百个示例,但我想了解我的代码中有什么问题。 正如标题所示,我想在 phone 打开时执行一些代码,特别是我想设置一些警报以获取通知,但现在不相关,我的问题是启动接收器 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>
并且我已经创建了接收器 class
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: :我忘了说我需要停止调试警报的代码,但我认为这不是问题,因为它甚至不显示吐司。 更新: 完整清单
<?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>
I should run the activity before the receiver?
必须使用明确的 Intent
来启动您的应用程序的组件之一,然后清单注册的接收器才能工作。对于 99% 的 Android 应用,这意味着用户必须从主屏幕启动您的应用。如果您的应用程序作为其他应用程序的插件,您可能不需要 activity — 请与将托管您的插件的应用程序的开发人员讨论这个问题。
how can I set notification if the user doesn't open activity?
如果用户不打开 activity,则不会设置通知。只有当用户允许您 运行 时,您的应用才会 运行 。如果用户选择不启动您的应用程序,或者如果用户选择从“设置”中 "Force Stop" 您的应用程序,您的清单注册接收器将不会接收广播。