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?

War es hilfreich?

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

http://www.zestofandroid.blogspot.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top