Как вызвать методы Сервиса из активности?

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

Solutions Collecting From Web of "Как вызвать методы Сервиса из активности?"

Один из способов сделать это – определить интерфейс с Android AIDL и использовать подсистему Binder для выполнения IPC. В ссылке, которую я разместил, есть большой набор инструкций. Я бы начал там, а затем публиковать здесь, если у вас есть вопросы. Несмотря на то, что это довольно сложная тема (IPC), Android и Binder делают действительно хорошую работу, делая ее довольно простой (по крайней мере, для начала, я уверен, что вы могли бы усложнить, если хотите ;-))

Изменить Как указано в комментариях, это необязательно, если Service и клиент работают в одном процессе. Если вы не укажете иное, это значение по умолчанию. Тем не менее, он по-прежнему работает независимо, он просто добавляет немного сложнее.

Вот пример, который может помочь
Server.java:

 package com.example.bindservice.binder; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class Server extends Service { IBinder mBinder = new LocalBinder(); @Override public IBinder onBind(Intent intent) { return mBinder; } public class LocalBinder extends Binder { public Server getServerInstance() { return Server.this; } } public String getTime() { SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return mDateFormat.format(new Date()); } } 

Client.java

 package com.example.bindservice.binder; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.example.bindservice.binder.Server.LocalBinder; public class Client extends Activity { boolean mBounded; Server mServer; TextView text; Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView)findViewById(R.id.text); button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { text.setText(mServer.getTime()); } }); } @Override protected void onStart() { super.onStart(); Intent mIntent = new Intent(this, Server.class); bindService(mIntent, mConnection, BIND_AUTO_CREATE); }; ServiceConnection mConnection = new ServiceConnection() { public void onServiceDisconnected(ComponentName name) { Toast.makeText(Client.this, "Service is disconnected", 1000).show(); mBounded = false; mServer = null; } public void onServiceConnected(ComponentName name, IBinder service) { Toast.makeText(Client.this, "Service is connected", 1000).show(); mBounded = true; LocalBinder mLocalBinder = (LocalBinder)service; mServer = mLocalBinder.getServerInstance(); } }; @Override protected void onStop() { super.onStop(); if(mBounded) { unbindService(mConnection); mBounded = false; } }; } 

В этом разделе приведен пример кода для этого права в «Служебной документации» в разделе «Пример локальной службы»:

http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

Также для тех людей, которые предлагают помощь: если ваш сервис и клиент являются частью вашего собственного .apk и работают в одном и том же процессе (поведение по умолчанию), нет необходимости в помощи; Это просто дополнительная сложность, которая не дает вам ничего.

Я не знаю, где ваша проблема, пожалуйста, разместите код. Используя Связывание, активность может иметь доступ к объекту службы. См. Примеры в API для создания соединения между активностью и сервисом.

Имея объект службы в своей деятельности, вы можете просто позвонить:
mService.yourMethod ();
Мы могли бы помочь вам намного лучше, если бы вы точно описали свою проблему, и, как я уже сказал, разместите некоторые фрагменты.