Android: получение класса после вызова startService () - PullRequest
0 голосов
/ 29 ноября 2010

Я путаюсь со всей различной терминологией при использовании Android: Activity, Service ...

Сейчас я создаю сервис:

startService(new Intent(this, RingerServer.class));

И этот сервис запускает поток:

public class RingerServer extends Service {

    public void onCreate() {
        super.onCreate();

        new Thread(new Ringer()).start();
    }

    public class Ringer implements Runnable { ... }

    public void refuseConnection() { ... }

}

В этом сервисе, RingerServer, у меня также есть методы, которые я хочу использовать.Я хотел бы сохранить ссылку на RingerServer.Мне бы хотелось, чтобы Activity, создавшая службу, могла вызывать denConConnection (), но не делала этот метод статичным.

startService возвращает ComponentName, поэтому я пытался привести его обратно к RingerServer, ноэто не похоже на работу.Я вижу, что он имеет getClass (), и я проверил, и getClassName () дает мне правильный класс.Я не смог правильно использовать getClass ().

Можно ли как-нибудь сохранить ссылку на недавно созданный класс RingerServer?Я уверен, что это тривиально, но я застрял прямо сейчас.

Большое спасибо,

Джеймс

Ответы [ 2 ]

0 голосов
/ 30 ноября 2010

Вы можете использовать ServiceConnection, чтобы получить доступ к вашему классу обслуживания. Смотрите пример кода здесь:

Служба Android работает после нажатия клавиши Home

Тем не менее, управлять вещами с помощью обработчика onStart службы намного проще.

0 голосов
/ 29 ноября 2010

У вас есть два варианта

1. Переопределить onStartCommand службы и запустить сервер с намерением, используя действие.это намерение будет получено в сервисе на основе действия намерения, которое вы можете вызвать denConConnection ()

//In Activity 
...
//Start the service 
Intent intent=new Intent("com.xx.xx.REFUSE_CONNECTION");
startService(this,intent);
...
//In Service 

public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        if(intent.getAction().equals("com.xx.xx.REFUSE_CONNECTION")){
            //Refuse the connection
            refuseConnection();
        }else {
            //Do something else
        }
}

// В манифесте

<service android:name="RingerService">
     <intent-filter>
       <action android:name="com.xx.xx.REFUSE_CONNECTION"></action>
     </intent-filter>
</service>
  1. Реализация интерфейса AIDL и переопределение onBind() службы, и используйте этот интерфейс для вызова отказаться от подключения ().Обратитесь к этой ссылке http://developer.android.com/guide/developing/tools/aidl.html относительно AIDL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...