2010-02-17 87 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接口来调用和检索任何服务