美好的一天,我有一个活动,我使用待处理的Intent从appwidget上的图标导航到。一切都在服务类中完成。现在,活动有一个刷新按钮,当按下该按钮时,它会发送一个intent,该intent调用服务上的onStart()方法来更新自身并执行一些Web操作。如何在不暂时存在活动的情况下反映活动中服务可能发生的更改。
服务活动:
if(intent.getExtras()!= null){
appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
//if i get this action from my detailedinfo class add a boolean to it
if(intent.getAction() == refresh_action){
// boolean variable to hold condition
my_action = true;
}
Intent forecast = new Intent(this,detailedInfo.class );
forecast.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
forecast.putExtra("cityname", city);
PendingIntent forecastIntent = PendingIntent.getActivity(this, 0, forecast, 0);
/*onclick to go to detailedInfo class*/
remoteView.setOnClickPendingIntent(R.id.city_image_id, forecastIntent);
if(my_action == true){
//Log.d(TAG, "my_action is true, performing pending intent");
try {
forecastIntent.send(this, 0, forecast);
} catch (CanceledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在Activity类中:
Intent service = new Intent(this, cityService.class);
service.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
service.setAction(refresh_action);
Uri data = Uri.withAppendedPath(Uri.parse(CityWidgetProvider.URI_SCHEME + "://widget/id/"), String.valueOf(appWidgetId));
service.setData(data);
startService(service);
我尝试将setAction()方法添加到调用服务的intent,然后使用相同的pendingIntent(尽管我认为是一个很长的镜头),但它们似乎被忽略了。请问我该怎么做以及我可能做错了什么。像往常一样,任何帮助都非常感谢。谢谢。
答案 0 :(得分:1)
我不是100%清楚你要做什么,但最简单的方法是在你的Activity onResume中注册一个BroadcastReceiver(在onPause中删除它)。当服务完成它需要做的任何事情时,广播该信息。
在活动中
public static final String ACTION_STRING = "THE_BIG_ACTION";
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Do whatever you want here
Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT);
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, new IntentFilter(ACTION_STRING));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
在服务中,当你完成后,只需致电...
sendBroadcast(new Intent(YourActivityClass.ACTION_STRING));
如果您想要包含一些数据,只需将其置于意图中,就像启动活动时一样。
如果服务完成时您的活动已关闭,并且用户返回该活动,您将错过通知。这是一个需要解决的不同问题。