私はこの単純なサービスを利用して、ユーザーの現在地をブロードキャストしています。サービスのライフサイクルを制御するためだけのバインディングメカニズムを使用したいが、サービスはまだ開始していない。bindService()の後にサービスが作成されていない(または接続されていません)
どうしたのですか?
public class GPSActivity extends ListActivity {
...
protected void onResume() {
super.onResume();
Log.i("Service", "Service bound");
Intent intent = new Intent(this, LocationService.class);
bindService(intent, service_connection , Context.BIND_AUTO_CREATE);
}
protected void onPause() {
if (dataUpdateReceiver!=null)
unregisterReceiver(dataUpdateReceiver);
unbindService(service_connection);
super.onPause();
}
class LocationServiceConnection implements ServiceConnection{
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("Service", "Service Connected");
}
public void onServiceDisconnected(ComponentName name) {
}
}
}
LocalBinder.java
public class LocalBinder<S> extends Binder {
private String TAG = "LocalBinder";
private WeakReference<S> mService;
public LocalBinder(S service){
mService = new WeakReference<S>(service);
}
public S getService() {
return mService.get();
}
}
LocationService.java
public class LocationService extends Service {
public void onCreate() {
initLocationListener();
Log.i("Location Service","onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("Location Service", "Received start id " + startId + ": " + intent);
return START_NOT_STICKY;
}
private final IBinder mBinder = new LocalBinder<LocationService>(this);
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
AndroidManifest.xml
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
...
<service android:name=".LocationService">
</service>
</application>
EDIT: NickTの答えを修正しました。
マニフェストエントリはインテントフィルタまたは正しい名前
<service
android:enabled="true"
android:name="com.android.gps.services.LocationService">
<intent-filter>
<action android:name="com.android.gps.services.LocationService" />
</intent-filter>
</service>
そして、私は活動を開始するときに使用する必要があるもののようなものだった結合するために使用意図を持っていませんでした。正しいものは次のとおりです。
Intent intent = new Intent("com.android.gps.services.LocationService");
を使用するどのようなあなたの '公共IBinder [OnBind]の(テントの意図)LocationService.java''で 'メソッドは次のように見えますか? – Jens
@Jens私はonBind()メソッドを含めるように質問を編集しました。 – bughi
Hm。そして、あなたは 'Log.i(" Location Service "、" onCreate() ");'あなたのlogcatにログインしていませんか? – Jens