7

Я не могу получить метод BroadcastReceiver onReceive, вызванный с использованием намерения BOOT_COMPLETED.Мой BroadcastReceiver не получает намерения BOOT_COMPLETED после моих ботинков N1

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... 
     } 
} 
+0

oracleicom, как проблема была решена. скажите – 2011-02-12 20:15:03

ответ

15

Все приложения, которые получают широковещательную рассылку BOOT_COMPLETED, должны быть установлены на внутреннем накопителе, так как Android доставляет ACTION_BOOT_COMPLETED до того, как внешнее хранилище будет установлено на устройство.

Чтобы гарантировать, что ваше приложение будет установлено во внутренней памяти, вам нужно всего лишь NOT, чтобы объявить атрибут манифеста android:installLocation.

Другим вариантом, чтобы установить следующий манифест раздел: android:installLocation="internalOnly"

Вы можете найти более подробную информацию об этом here.

+0

Ваша ссылка включает период, который вызывает a 404. Удаление заданного периода решает проблему. – Splaktar

+0

отличный ответ, я много охочусь, и я заканчиваю твою нить – Hunt

2

EDIT: Забудьте все, что я нашел лучшее объяснение.

Вы должны определить свой приемник с экспортировали = истина и включена = истина

<receiver android:name="com.jerrellmardis.umbrella.receiver.WeatherStartupReceiver" 
    android:enabled="true" 
    android:exported="true" 
> 

Я думаю, что если вы измените эту строку

<receiver android:name="com.jerrellmardis.umbrella.receiver.WeatherStartupReceiver"> 

для этого

<receiver android:name=".WeatherStartupReceiver"> 

он исправит вашу проблему.

Я пробовал это на одном из моих проектов, и он не начинался.

+1

Я не знаю, почему у вас возникли проблемы, но мне, конечно, не пришлось объявлять разрешенные и экспортированные для моих BOOT_COMPLETED приемников для получения уведомлений. – beekeeper

+0

Я перечитал документацию по android об этом, и, конечно же, они говорят, что как разрешенные, так и экспортированные свойства установлены по умолчанию «true» ... Опять я ошибаюсь: S. Я не вижу ничего странного в коде oracleicom – brent

+0

Так измените имя приемника на «.WeatherStartupReceiver», хотя класс не находится в корне моего каталога приложений? Текущая структура каталогов: /receiver/WeatherStartupReceiver.java – oracleicom

Смежные вопросы