2010-02-17 94 views
2

我有一個bindService的問題。在我的活動中,我有以下代碼:Android綁定服務問題

private ServiceConnection mConnection = new ServiceConnection() { 
     public void onServiceConnected(ComponentName className, 
      IBinder service) { 
     mService = IPrimary.Stub.asInterface(service); 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mService = null; 
    } 
}; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mContext = this; 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.login); 
    mApi = new ApiRequest(SIGNIN_METHOD); 
    boolean isConnected = bindService(new Intent(IPrimary.class.getName()), 
      mConnection, Context.BIND_AUTO_CREATE); 

但isConnected每次都等於false。

在我的清單文件我有:

 <service android:name=".DownloaderService"> 
    <intent-filter> 
<action android:name=".IPrimary" /> 

SI我不明白的問題。在logcat的出現:

I/ActivityManager(52):顯示活動com.touristeye.code/.login文件:485918毫秒(共913151毫秒)

謝謝

回答

3

展開action:name是全值在<action>元素中。可能是點前綴速記僅適用於組件元素(例如,<service>)。

0

你不應該這樣做:

boolean isConnected = bindService(new Intent(IPrimary.class.getName()), mConnection, Context.BIND_AUTO_CREATE); 

請把代碼,當你在私人ServiceConnection mConnection = new ServiceConnection() {}處理服務...我回撥,你必須處理有 我們不知道當服務該服務實際上是債券,直到我們從ServiceConnection

了回調這裏是流動

創建你的意圖來調用服務。您可以使用BIND_AUTO_CREATE啓動Service()或BindService()

一旦服務被綁定,它將創建一個隧道與客戶端進行通信,該客戶端即爲IBinder 接口。這是由您的AIDL接口實現和

private final MyServiceInterface.Stub mBinder = new MyServiceInterface.Stub() { 
    public int getNumber() { 
     return new Random().nextInt(100); 
    } 
}; 

public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Service OnBind()", Toast.LENGTH_LONG).show(); 
    return mBinder; 
} 

一旦返回您在客戶端創建的mBinder,ServiceConnection返回的IBinder會叫回來,你將可以通過該

獲得服務接口
  mConnection = new ServiceConnection() { 

     public void onServiceDisconnected(ComponentName name) { 
      // TODO Auto-generated method stub 

     } 

     public void onServiceConnected(ComponentName name, IBinder service) { 
      // TODO Auto-generated method stub 

      mService = MyServiceInterface.Stub.asInterface(service); 


    }; 

現在你有了mService接口來調用和檢索任何服務