2

我有自己运行的服务(服务自动启动)。

我有活动。
在此 Activity 按钮中启动方法DoIt()

Button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
      DoIt();
    }
});

当我按下按钮并且方法有效时,一些数据会写入data我的服务中的变量。
我可以data在日志中看到:

public String getMessage(String data) {
... 
Log.d(TAG, "Our Data: " + data);
return date;
...   

但是如何通过按下按钮在我的 Activity(按钮下方)中查看这些数据?
谢谢。

4

4 回答 4

1

您无法从您的活动中看到这些数据。
制作一个应用程序类会让你的事情变得更容易。您可以将数据保存在应用程序类中,以便服务可以更新它,而活动可以检索它。不知道这是否是你想要的。

于 2012-09-19T09:49:11.487 回答
1

从 IntentService 向 Activity 发送数据

关键词是BroadcastReceiver

BroadcastReceiver 在这种情况下很方便。

  1. 从 IntentService 发送广播
  2. 在 Activity 中接收广播。

从服务发送数据

public class YourService extends IntentService {

  public YourService() {
    super("yourService");
  }

  protected void onHandleIntent(@Nullable Intent intent) {

    sendDataToActivity()
  }

  private void sendDataToActivity()
  {

    Intent sendLevel = new Intent();
    sendLevel.setAction("TIMER_ACTION");
    sendLevel.putExtra( "TIMER_VALUE","This is the value from service");
    sendBroadcast(sendLevel);

  }

}

从服务接收数据
为此,您需要注册您ActivityBroadcastReceiver

public class YourActivity extends AppCompatActivity {

   TimerReceiver receiver;

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.track_wifi_activity_layout);
       receiver = new TimerReceiver();
       registerReceiver(receiver, new IntentFilter("TIMER_ACTION"));  //<----Register
   }

   @Override
   public void onStop()
   {
      super.onStop();
      unregisterReceiver(receiver);           //<-- Unregister to avoid memoryleak
   }

   class TimerReceiver extends BroadcastReceiver {

       @Override
       public void onReceive(Context context, Intent intent) {

          if(intent.getAction().equals("TIMER_ACTION"))
          {
              int level = intent.getStringExtra("TIMER_VALUE");

              // Show it in activity
          }

       }

    }

 }
于 2018-12-22T07:17:48.733 回答
0

像这样向您的活动添加处理程序:-

Handler handler = new Handler() {
        public void handleMessage(Message message) {
            Object path = message.obj;
            if (message.arg1 == RESULT_OK && path != null) {
                Toast.makeText(context,
                        "Success" + path.toString(), Toast.LENGTH_LONG)
                        .show();
            } else {
                Toast.makeText(context, "Operation failed.",
                        Toast.LENGTH_LONG).show();
            }

        };
    };

并在消息对象中发送来自服务的值,如下所示:-

 Messenger messenger = (Messenger) extras.get("MESSENGER");
                Message msg = Message.obtain();
                msg.arg1 = data;//your value here
                msg.obj = data;
                try {
                    messenger.send(msg);
                } catch (android.os.RemoteException e1) {
                    Log.w(getClass().getName(), "Exception sending message", e1);
                }

希望它有效。

于 2012-09-19T11:46:37.977 回答
0

您需要将服务绑定到您的活动。绑定服务后,您可以访问服务中的方法。看看这个例子如何 http://developer.android.com/guide/components/bound-services.html

您还可以为您的服务添加一个侦听器,以便在数据更改时立即通知您的活动

于 2012-09-19T11:17:45.863 回答