2014-01-19 6 views
0

Разработка моего первого приложения для Android на данный момент. Я новичок в Android, но сделал немного Java в университете. PHP, JavaScript, C# и собственный язык моих работодателей (в отличие от BASIC) - это мой опыт, поэтому у меня есть хорошее понимание программирования.Подключиться к моей службе, службе и широковещаниюListener

План:

  • Acticity с тумблера - когда на него начинает службу (ниже).
  • A Service, который будет сидеть в фоновом режиме и слушать данные по определенному TCP-порту.
  • A BroadcastReceiver, который будет контролировать статус WiFi.

У меня есть все три на месте - но, похоже, не может понять, как их подключить!

Service должен иметь возможность отправлять данные обратно в Activity. Service также следует прекратить, если Activity прекращается (но не тогда, когда он просто закрыт - только если приложение завершается

BroadcastReceiver должен быть в состоянии остановить службу и обновить Activity, если WiFi изменений отключен..

на данный момент все три работают полу независимо друг от друга. Activity может остановиться и не начать Service не беспокоить. BroadcastReceiver покажет Toast сообщение, если WiFi отключен. Его только между связи я не

Приложение предназначено для: личный проект, и я буду открыт, когда это будет завершено. Поэтому я более чем рад поделиться текущим кодом с любым, кто может помочь. Это на http://www.tip2tail.co.uk/files/android_code.zip

Любая помощь приветствуется :) Спасибо!

ответ

2

A 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)); 

Это сервисное соединение, которое я использую.

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

Надеюсь, мой ответ поможет вам и удачи в этом.

+0

Спасибо @robin! Так что скажите, что у меня был метод в 'Activity', называемый' doSomething (String sText) ', и я хотел вызвать его из' Service', мне нужно будет повторно подключить 'LocalBinder' и т. Д.? Я все еще не уверен, что получаю это! :( – tip2tail

+1

Я бы не вызывал методы из активности. Активность может быть уничтожена. Поместите эти методы в свою службу. Вы можете вызывать методы из службы, потому что вы передаете службу обратно в действие mService = binder.getService(); –

+1

Во-вторых, отключение службы не означает ее уничтожения. Когда активность связана с сервисом, она почти застряла с ней. Отключив, активность может быть уничтожена безопасно. Вы всегда можете восстановить связь с сервисом. начинайте два раза, так что не беспокойтесь об этом. –

Смежные вопросы