此相关应用的部分内容为IntentService
(DatabaseService
)和AppWidgetProvider
(LotWidget
)。在LotWidget
中,当按下某个按钮时,会触发PendingIntent
,它会向自己发送广播,并在onReceive()
中收到。到目前为止,这一切都很好。在onReceive
中,我从Intent
以及各种附加内容中读取了操作,并从IntentService
开始,或者开始主Activity
。启动活动工作正常,但由于某些原因我无法理解,DatabaseService
没有启动。我知道通过DatabaseService
测试发送导致Log
意图的代码。
以下是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);
}
}
使用相同的意图从主DatabaseService
启动Activity
可以正常工作。我的清单将DatabaseService
定义为Service
,如此:
<service android:name="com.bsprague.thelot.DatabaseService" >
</service>
我知道Service
未启动,因为Log
的{{1}}未显示onHandleIntent
,但显示正常Intent
从主Activity
发送。 Android中是否存在我缺少的内容,因此您无法从Service
启动BroadcastReceiver
?
答案 0 :(得分:1)
您正在 Intent
上设置操作,而您的<intent-filter>
没有该操作。您可以考虑使用setAction()
来代替putExtra()
来电。
没关系 - 正如您在评论中指出的那样,由于您正在指定组件,因此将忽略所有其他路由元素(例如,操作)。您更新的评论中的错误表明,您的Intent
选择了错误的组件,LotWidget
而不是DatabaseService
。