7

我無法使用BOOT_COMPLETED意圖調用我的BroadcastReceiver onReceive方法。在我的N1啓動後,我的BroadcastReceiver未收到BOOT_COMPLETED意圖

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廣播。

要確保您的應用程序將安裝在內存中,您只需要而不是來聲明android:installLocation清單屬性。

另一個選項是設置在清單部分如下:android:installLocation="internalOnly"

你可以找到關於它的here更多信息。

+0

您的鏈接包括一段時間404.刪除尾隨期解決了這個問題。編輯提交。 – Splaktar 2014-07-26 16:39:08

+0

優秀的答案,我狩獵了很多,我最終在你的線程 – Hunt 2015-01-25 09:14:31

2

編輯:忘記一切,我已經找到了一個更好的解釋。

你必須與出口=真正的定義接收器並啓用=真

<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 2010-10-14 17:38:20

+0

我已經重讀了關於這個的android文檔,當然他們說啓用和導出的屬性都默認設置爲「true」......我又錯了:S。我在oracleicom的代碼上看不到任何其他奇怪 – brent 2010-10-14 17:59:01

+0

因此,即使該類不在我的應用程序目錄的根目錄下,將接收者的名稱更改爲「.WeatherStartupReceiver」?當前的目錄結構是/receiver/WeatherStartupReceiver.java – oracleicom 2010-10-14 18:21:41

相關問題