2010-03-20 110 views
0

我有一个AIDL文件定义如下:不能结合服务

package com.erbedo.callalert; 

interface RemoteCallAlert { 
    void notifyCallEnded(); 
} 

该服务是:

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

和具有结合到该服务的活动是: 包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)); 
    } 
} 

onServiceConnected未被调用。我错过了明显的东西吗?

回答

2

startService()不使用ServiceConnectionbindService()呢。

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

的onServiceConnected不叫。

对于与服务绑定,您需要调用bindService()。它提供了持久连接,并且在连接建立onServiceConnected()被调用之后。

第二点: - 如果您使用的是AIDL IPC机制,那么我认为您需要2个diff进程/应用程序之间的通信。这里你需要在同一个PACKAGE中的服务和Activity端都有相同的.aidl文件副本。然后,你需要修改点点在你的活动方..

,你可以在这里找到

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

+1

为什么我需要将它们放在同一个包? 'Parcelable'是一个界面。你使用它的机制,而不是包的名称。 – 2012-02-13 09:06:18