2012-07-03 107 views
0

該應用程序的有關部分是IntentServiceDatabaseService)和AppWidgetProviderLotWidget)。在LotWidget中,當按下某個按鈕時,會觸發一個PendingIntent,它向自己發送廣播,並在onReceive()中收到廣播。到目前爲止,所有這些工作都很好。在onReceive,我宣讀了Intent以及各種額外的動作,並且或者啓動該IntentService,或啓動主Activity。開始活動正常,但由於某些原因,我無法理解,DatabaseService未啓動。我知道導致DatabaseService意圖的代碼正在通過與Log進行測試發送。從BroadcastReceiver啓動服務

這裏是onReceive代碼:

@Override 
public void onReceive(Context context, Intent intent) {  
    super.onReceive(context, intent); 
    if(intent.getAction().equals(RETURN_DATA_WIDGET) && initialize(context)){ 
     updateWidget(context); 
    } 
    else if(intent.getAction().equals(INTERNAL_INC)){ 
     Log.d("WIDG", "Incrememnt"); 
     Intent incr = new Intent(context, DatabaseService.class); 
     incr.setAction(INCREMENT); 
     incr.putExtra("incval", intent.getIntExtra("incval", 999)); 
     context.startService(intent); 
    } 
    else if(intent.getAction().equals(INTERNAL_UP)){ 
     Log.d("WIDG", "UPDATE"); 
     Intent upd = new Intent(context, DatabaseService.class); 
     upd.setAction(UPDATE_COUNT); 
     context.startService(intent); 
    } 
    else if(intent.getAction().equals(OPEN_APP)){ 
     Intent open = new Intent(context, TheLotActivity.class); 
     open.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(open); 
    } 
} 

用同樣的意圖,開始從主ActivityDatabaseService工作正常。我的清單定義DatabaseServiceService像這樣:

<service android:name="com.bsprague.thelot.DatabaseService" > 
    </service> 

我知道Service沒有被啓動,因爲一個LogonHandleIntent一開始不被顯示,但它顯示正常時,這Intent是從主Activity發送。在Android中有什麼東西我錯過了,所以你不能從BroadcastReceiver開始Service

回答

1

您正在對 Intent設置操作,並且您的 <intent-filter>沒有該操作。您可以考慮使用 putExtra()呼叫替代 setAction()呼叫。

沒關係 - 你在評論中指出,因爲您指定的組件,其它所有路由元素(例如,動作)將被忽略。您更新後的評論中的錯誤表明您的Intent正在挑選錯誤的組件0123'而不是DatabaseService

+0

我只是想用putExtra()取代的setAction()時,DatabaseService仍然從來沒有被稱爲閱讀的額外費用。 – BSprague

+0

@ user1500074:檢查LogCat是否有警告。 – CommonsWare

+0

我得到這個錯誤: '07 -03 18:43:56.546:W/ActivityManager(1629):無法啓動服務意圖{行爲=向上FLG = 0x10000000的CMP = com.bsprague.thelot/.LotWidget bnds = [266,767] [398,839]}:找不到' 我剛纔得到了這個,然後我從服務切換到IntentService,錯誤完全消失。這個問題是否與隨機斜線有關? – BSprague