我有自己运行的服务(服务自动启动)。
我有活动。
在此“活动”按钮中,启动方法DoIt()
:
Button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
DoIt();
}
});
当我按下按钮并且方法有效时,有些数据会写入我服务中的变量data
。
我可以在Log中看到data
:
public String getMessage(String data) {
...
Log.d(TAG, "Our Data: " + data);
return date;
...
但是如何通过按下按钮在我的“活动”(按钮下方)中查看此数据?
感谢。
答案 0 :(得分:1)
您无法从活动中看到此数据 创建应用程序类会让事情变得更容易。您可以将数据保存在应用程序类中,以便服务可以更新它,并且活动可以检索它。不确定那是不是你想要的。
答案 1 :(得分:1)
您需要将服务绑定到您的活动。绑定服务后,您可以访问服务中的方法。看看这个例子是怎么做的 http://developer.android.com/guide/components/bound-services.html
您还可以向服务添加侦听器,以便在数据更改时立即通知您的活动
答案 2 :(得分: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);
}
希望它有效。
答案 3 :(得分:0)
关键字是BroadcastReceiver
BroadcastReceiver可用于此类情况。
从服务发送数据
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);
}
}
从服务接收数据
为此,您需要向Activity
注册BroadcastReceiver
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
}
}
}
}