Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不退出活动的情况下从服务刷新和重新加载活动,Android appwidget_Android - Fatal编程技术网

在不退出活动的情况下从服务刷新和重新加载活动,Android appwidget

在不退出活动的情况下从服务刷新和重新加载活动,Android appwidget,android,Android,您好,我有一个活动,我使用挂起的意图从appwidget上的图标导航到该活动。一切都是在服务类中完成的。现在,活动有一个刷新按钮,按下该按钮时,它会发送一个意图,调用服务上的onStart()方法来更新自身并执行一些web操作。在没有临时存在活动的情况下,如何在活动中反映服务可能发生的更改 服务到活动: if(intent.getExtras()!= null){ appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXT

您好,我有一个活动,我使用挂起的意图从appwidget上的图标导航到该活动。一切都是在服务类中完成的。现在,活动有一个刷新按钮,按下该按钮时,它会发送一个意图,调用服务上的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();
            }
在活动课上:

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));
如果您想包含一些数据,只需像启动活动时那样将其放在意图中即可


如果您的活动在服务完成时不在屏幕上,并且用户返回到它,则您将错过通知。这是另一个需要解决的问题。

很抱歉回复太晚。有网络问题。非常感谢你的帮助,我想这将是一条路要走。无论如何,我的意思是,由于点击小部件中的图标可以通过服务进入活动,我希望刷新/更新信息并显示活动中的更改,而不退出活动。如果我按下刷新按钮,我可以在小部件中看到更改和更新的数据。但我必须返回小部件并单击小部件图标,然后才能看到活动中的更新信息。:-)