在不退出活动的情况下从服务刷新和重新加载活动,Android appwidget
您好,我有一个活动,我使用挂起的意图从appwidget上的图标导航到该活动。一切都是在服务类中完成的。现在,活动有一个刷新按钮,按下该按钮时,它会发送一个意图,调用服务上的onStart()方法来更新自身并执行一些web操作。在没有临时存在活动的情况下,如何在活动中反映服务可能发生的更改 服务到活动:在不退出活动的情况下从服务刷新和重新加载活动,Android appwidget,android,Android,您好,我有一个活动,我使用挂起的意图从appwidget上的图标导航到该活动。一切都是在服务类中完成的。现在,活动有一个刷新按钮,按下该按钮时,它会发送一个意图,调用服务上的onStart()方法来更新自身并执行一些web操作。在没有临时存在活动的情况下,如何在活动中反映服务可能发生的更改 服务到活动: if(intent.getExtras()!= null){ appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXT
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();
}
在活动课上:
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()方法,然后使用相同的PendingEvent(尽管我认为这是一个长期的尝试),但它们似乎被忽略了。请问我该怎么做?我可能做错了什么。?如往常一样,我们非常感谢您的帮助。谢谢。我不是100%清楚您想做什么,但最简单的方法是在活动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));
如果您想包含一些数据,只需像启动活动时那样将其放在意图中即可
如果您的活动在服务完成时不在屏幕上,并且用户返回到它,则您将错过通知。这是另一个需要解决的问题。很抱歉回复太晚。有网络问题。非常感谢你的帮助,我想这将是一条路要走。无论如何,我的意思是,由于点击小部件中的图标可以通过服务进入活动,我希望刷新/更新信息并显示活动中的更改,而不退出活动。如果我按下刷新按钮,我可以在小部件中看到更改和更新的数据。但我必须返回小部件并单击小部件图标,然后才能看到活动中的更新信息。:-)