Android 连接我的活动、服务和广播侦听器
目前正在开发我的第一个Android应用程序。我是Android新手,但在大学里学过一点Java。PHP、JavaScript、C#和我的雇主专有语言(与BASIC一样)是我的背景,所以我对编程有很好的理解 该计划是:Android 连接我的活动、服务和广播侦听器,android,service,broadcastreceiver,Android,Service,Broadcastreceiver,目前正在开发我的第一个Android应用程序。我是Android新手,但在大学里学过一点Java。PHP、JavaScript、C#和我的雇主专有语言(与BASIC一样)是我的背景,所以我对编程有很好的理解 该计划是: 带有切换按钮的活动性-开启时启动服务(如下) 位于后台并侦听特定TCP端口上的数据的服务 监控WiFi状态的广播接收器 我把这三个都准备好了——但似乎不知道如何连接它们 服务应该能够将数据发送回活动。如果活动终止,服务也应停止(但如果刚刚关闭,则不应停止-仅当应用程序终止时停
- 带有切换按钮的
-开启时启动服务(如下)活动性
- 位于后台并侦听特定TCP端口上的数据的
服务
- 监控WiFi状态的
广播接收器
服务
应该能够将数据发送回活动
。如果活动
终止,服务也应停止(但如果刚刚关闭,则不应停止-仅当应用程序终止时停止)
如果WiFi更改为disconnected(断开连接),BroadcastReceiver
应该能够停止服务并更新活动
目前,这三个功能都是半独立工作的。活动
可以停止并启动服务
无需任何麻烦。广播接收器
将在WiFi断开时显示一条Toast
消息。这只是我不确定的内部通信
该应用程序是一个个人项目,完成后我将公开其来源。因此,我非常乐意与任何能够提供帮助的人共享当前代码。它位于
感谢您的帮助:)谢谢 解释。您可以绑定到服务并从中调用方法
Intent it = new Intent(MainActivity.this, MyService.class);
bindService(it, mConnection, Context.BIND_AUTO_CREATE);
绑定到每个活动中的服务,以便可以对其执行任何操作。
别忘了在你的活动中解开它的束缚
if(mBound)unbindService(mConnection);
只需拨打电话停止服务
stopService(new Intent(this, MyService.class));
这是我使用的serviceConnection
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
将此项放在您的服务中以返回活动:
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public class LocalBinder extends Binder {
MyService getService() {
// Return this instance of LocalService so clients can call public methods
return MyService.this;
}
}
最后,在启动服务startService(intent)后将调用该函数代码>
请注意,它返回Service.START\u STICKY
。这将防止您的服务被终止,除非操作系统内存很少
public int onStartCommand(Intent intent, int flags, int startid) {
return Service.START_STICKY;
}
我希望我的回答能帮助你,祝你好运。谢谢@robin!因此,假设我在活动中有一个名为doSomething(String sText)
的方法,我想从服务调用它
我是否需要重新连接LocalBinder
等?我还是不确定我能不能得到这个!:(我不会从活动中调用方法。该活动可能会被销毁。请将这些方法放在您的服务中。您可以从服务中调用方法,因为您将服务传递回活动mService=binder.getService();第二,解除绑定服务并不意味着将其销毁。当activty绑定到服务时,它几乎会被卡住。通过解除绑定,activty可以安全地销毁。您始终可以重新绑定到服务。请注意,服务不能启动两次,所以不要担心。啊,好的。因此,Activity调用服务上的方法,而不是ot她的方法。很好。第一阶段做得很好。仍然需要让广播接收器告诉服务停止。当然,另一种方法是可能的,但我不会这么做。