Kann nicht an den Service binden
Frage
Ich habe eine AIDL Datei wie folgt definiert:
package com.erbedo.callalert;
interface RemoteCallAlert {
void notifyCallEnded();
}
Der Service ist:
package com.erbedo.callalert;
public class CallAlert extends Service {
Filter callListener;
private final RemoteCallAlert.Stub mBinder = new RemoteCallAlert.Stub() {
@Override
public void notifyCallEnded() throws RemoteException {
// TODO
}
};
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this, "CallAlert Created", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "CallAlert Destroyed", Toast.LENGTH_LONG).show();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Toast.makeText(this, "CallAlert Started", Toast.LENGTH_LONG).show();
callListener = new Filter();
TelephonyManager tm =
(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(this.callListener, PhoneStateListener.LISTEN_CALL_STATE);
}
public void callEnded() {
// TODO
}
}
und die Aktivität, die zu binden muss der Service ist: Paket com.erbedo.callalert;
public class DummyStart extends Activity {
Filter callListener;
RemoteCallAlert mService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
Log.d("CONNECT","OK");
}
public void onServiceDisconnected(ComponentName className) {
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout l = new LinearLayout(this);
setContentView(l);
this.startService(new Intent(this, CallAlert.class));
}
}
Die onServiceConnected wird nicht aufgerufen. Bin ich etwas fehlt offensichtlich?
Lösung
startService()
keine ServiceConnection
verwenden. bindService()
der Fall ist.
Andere Tipps
Intent intent = new Intent(CallAlert.class.getName());
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
Die onServiceConnected wird nicht aufgerufen.
Für die Dienstbindung müssen Sie bindService () aufzurufen. Es bietet die Persistenz-Verbindung, und nach dem Verbindungsaufbau onServiceConnected () aufgerufen wird.
Zweiter Punkt: - Wenn Sie AIDL IPC-Mechanismus verwenden, dann denke ich, Sie die Kommunikation zwischen 2 diff Prozesse / Anwendungen benötigen. Hier müssen Sie gleiche Kopie .aidl Datei sowohl in Service und Activity Seite in demselben Paket haben. Dann brauchen Sie etwas in Ihrer Aktivität Seite ändern ..
Sie können hier finden