连接我的Activity,Service和BroadcastListener

时间:2014-01-19 22:05:26

标签: android service broadcastreceiver

目前开发我的第一个Android应用。我是Android的新手,但在大学里做了一点Java。 PHP,JavaScript,C#和我的雇主专有语言(与BASIC不同)是我的背景,所以我对编程理解很好。

计划是:

  • 带有切换按钮的Acticity - 启用时启动服务(下方)。
  • 一个Service,它将位于后台并侦听特定TCP端口上的数据。
  • 将监控WiFi状态的BroadcastReceiver

我已经完成了所有这三项工作 - 但似乎无法弄清楚如何连接它们!

Service应该能够将数据发送回Activity。如果Service被终止,Activity也应该停止(但如果它刚刚关闭则不会停止 - 仅当应用程序被终止时才会停止。

如果WiFi更改为已断开连接,则BroadcastReceiver应该能够停止服务并更新Activity

目前这三个人都是半独立的。 Activity可以停止并启动Service无需麻烦。如果WiFi断开连接,BroadcastReceiver将显示Toast消息。它只是我不确定的相互沟通。

该应用程序是一个个人项目,我将在完成后公开采购。因此,我非常乐意与任何能够提供帮助的人分享当前的代码。它位于http://www.tip2tail.co.uk/files/android_code.zip

感谢任何帮助:)谢谢!

1 个答案:

答案 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;
}

我希望我的回答会帮助你并祝你好运。