问题描述
我无法使用BOOT_COMPLETED意图调用我的BroadcastReceiver onReceive方法.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jerrellmardis.umbrella"
android:versionCode="4"
android:versionName="1.0.3">
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<activity android:name=".activities.Umbrella" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activities.Preferences" android:label="@string/app_name" android:screenOrientation="portrait" />
<receiver android:name="com.jerrellmardis.umbrella.receiver.WeatherStartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name=".service.WeatherUpdateService">
<intent-filter>
<action android:name="com.jerrellmardis.umbrella.service.WeatherUpdateService" />
</intent-filter>
</service>
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
WeatherStartupReceiver.java
package com.jerrellmardis.umbrella.receiver;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.Contacts.People;
import android.util.Log;
import com.jerrellmardis.umbrella.R;
public class WeatherStartupReceiver extends BroadcastReceiver {
private NotificationManager mNotificationManager;
private int SIMPLE_NOTFICATION_ID;
@Override
public void onReceive(Context context, Intent intent) {
// Do something interesting here...
}
}
所有接收BOOT_COMPLETED
广播的应用程序都必须安装在内部存储器上,因为Android在外部存储器安装到设备上之前先传送了ACTION_BOOT_COMPLETED
广播. .
要确保将应用程序安装在内部存储器中,只需不需要声明android:installLocation
清单属性.
另一个选项是在清单部分中设置以下内容:android:installLocation="internalOnly"
您可以在此处找到有关它的更多信息./p>
I am unable to get my BroadcastReceiver onReceive method called using the BOOT_COMPLETED intent.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jerrellmardis.umbrella"
android:versionCode="4"
android:versionName="1.0.3">
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<activity android:name=".activities.Umbrella" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activities.Preferences" android:label="@string/app_name" android:screenOrientation="portrait" />
<receiver android:name="com.jerrellmardis.umbrella.receiver.WeatherStartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name=".service.WeatherUpdateService">
<intent-filter>
<action android:name="com.jerrellmardis.umbrella.service.WeatherUpdateService" />
</intent-filter>
</service>
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
WeatherStartupReceiver.java
package com.jerrellmardis.umbrella.receiver;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.Contacts.People;
import android.util.Log;
import com.jerrellmardis.umbrella.R;
public class WeatherStartupReceiver extends BroadcastReceiver {
private NotificationManager mNotificationManager;
private int SIMPLE_NOTFICATION_ID;
@Override
public void onReceive(Context context, Intent intent) {
// Do something interesting here...
}
}
All the applications that receive the BOOT_COMPLETED
broadcast must be installed on the internal storage because Android delivers ACTION_BOOT_COMPLETED
broadcast before the external storage is mounted to the device.
To ensure that your application will be installed on the internal memory you just need NOT to declare the android:installLocation
manifest attribute.
Another option is to set the following in the manifest section: android:installLocation="internalOnly"
You can find more information about it here.
这篇关于N1启动后,我的BroadcastReceiver没有收到BOOT_COMPLETED意图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!