2011-11-03 86 views
0

美好的一天,我有一个活动,我从appwidget上的图标导航到使用待定内容的活动。一切都在服务课上完成。现在,该活动有一个刷新按钮,当它按下时,它会发送一个调用服务上的onStart()方法的意图来更新自身并执行一些Web操作。我如何去反映活动中服务可能发生的变化,而不是临时存在活动。刷新和重新加载活动从服务而不退出活动,Android appwidget

服务到活动:

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()方法来调用服务,然后使用相同的PendingIntent(意图即使我认为是一个长镜头),但他们似乎被忽略。请如何处理这个问题,以及我可能做错了什么?像往常一样,任何帮助都非常感谢。谢谢。

回答

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)); 

如果你想加入一些数据,只是把它的意图就像您在开始活动时一样。

如果您的活动在服务完成后关闭屏幕,并且用户返回时,您将错过了通知。这是一个需要解决的问题。

+0

对于迟到的回复感到抱歉。有互联网问题。非常感谢您的帮助,我认为这将是一条路。无论如何,我的意思是,因为点击小部件中的图标可以让我通过服务访问活动,我想刷新/更新信息并显示活动中的更改,而无需退出活动。如果我按下刷新按钮,我可以看到小部件中的更改和更新的数据。但我必须返回小部件并在查看活动中的更新信息之前单击小部件图标。 :-) – irobotxxx