該應用程序的有關部分是IntentService
(DatabaseService
)和AppWidgetProvider
(LotWidget
)。在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);
}
}
用同樣的意圖,開始從主Activity
的DatabaseService
工作正常。我的清單定義DatabaseService
爲Service
像這樣:
<service android:name="com.bsprague.thelot.DatabaseService" >
</service>
我知道Service
沒有被啓動,因爲一個Log
在onHandleIntent
一開始不被顯示,但它顯示正常時,這Intent
是從主Activity
發送。在Android中有什麼東西我錯過了,所以你不能從BroadcastReceiver
開始Service
?
我只是想用putExtra()取代的setAction()時,DatabaseService仍然從來沒有被稱爲閱讀的額外費用。 – BSprague
@ user1500074:檢查LogCat是否有警告。 – CommonsWare
我得到這個錯誤: '07 -03 18:43:56.546:W/ActivityManager(1629):無法啓動服務意圖{行爲=向上FLG = 0x10000000的CMP = com.bsprague.thelot/.LotWidget bnds = [266,767] [398,839]}:找不到' 我剛纔得到了這個,然後我從服務切換到IntentService,錯誤完全消失。這個問題是否與隨機斜線有關? – BSprague