目前开发我的第一个Android应用。我是Android的新手,但在大学里做了一点Java。 PHP,JavaScript,C#和我的雇主专有语言(与BASIC不同)是我的背景,所以我对编程理解很好。
计划是:
Acticity
- 启用时启动服务(下方)。Service
,它将位于后台并侦听特定TCP端口上的数据。BroadcastReceiver
。我已经完成了所有这三项工作 - 但似乎无法弄清楚如何连接它们!
Service
应该能够将数据发送回Activity
。如果Service
被终止,Activity
也应该停止(但如果它刚刚关闭则不会停止 - 仅当应用程序被终止时才会停止。
如果WiFi更改为已断开连接,则BroadcastReceiver
应该能够停止服务并更新Activity
。
目前这三个人都是半独立的。 Activity
可以停止并启动Service
无需麻烦。如果WiFi断开连接,BroadcastReceiver
将显示Toast
消息。它只是我不确定的相互沟通。
该应用程序是一个个人项目,我将在完成后公开采购。因此,我非常乐意与任何能够提供帮助的人分享当前的代码。它位于http://www.tip2tail.co.uk/files/android_code.zip
感谢任何帮助:)谢谢!
答案 0 :(得分:2)
service解释。您可以绑定到服务并从中调用方法。
Intent it = new Intent(MainActivity.this, MyService.class);
bindService(it, mConnection, Context.BIND_AUTO_CREATE);
绑定到每项活动中的服务,这样您就可以随心所欲地做任何事情。 不要忘记在你的活动中取消绑定'onDestroy。
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_STICKY
。除非操作系统内存很少,否则这将阻止您的服务被杀死。
public int onStartCommand(Intent intent, int flags, int startid) {
return Service.START_STICKY;
}
我希望我的回答会帮助你并祝你好运。