2010-03-20 7 views
0

J'ai un fichier AIDL défini comme suit:Impossible de lier à Service

package com.erbedo.callalert; 

interface RemoteCallAlert { 
    void notifyCallEnded(); 
} 

Le service est:

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 
    } 
} 

et l'activité qui doit se lier au service est: package 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)); 
    } 
} 

Le service onServiceConnected n'est pas appelé. Est-ce que je manque quelque chose d'évident?

Répondre

2

startService() n'utilise pas de ServiceConnection. bindService() fait.

0
Intent intent = new Intent(CallAlert.class.getName()); 
bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
0

Le onServiceConnected n'est pas appelé.

Pour la liaison avec le service que vous avez besoin d'appeler bindService(). Il fournit la connexion de persistance et, après l'établissement de la connexion, onServiceConnected() est appelée.

Deuxième point: - Si vous utilisez le mécanisme AIDL IPC, je pense que vous avez besoin de la communication entre 2 processus diff/Application. Ici, vous devez avoir la même copie du fichier .aidl dans le service et le côté activité dans le même PACKAGE. Ensuite, vous devez modifier peu de votre côté d'activité ..

vous pouvez trouver ici

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

+1

Pourquoi ai-je besoin de les placer dans la même paquet? 'Parcelable' est une interface. Vous utilisez sa mécanique, pas le nom du paquet. –

Questions connexes