Android bindService问题

时间:2010-02-17 23:22:19

标签: android service

我遇到bindService问题。在我的活动中,我有以下代码:

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每次都等于假。

在我的清单文件中,我有:

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

  

我不明白这个问题。在logcat中出现:

I / ActivityManager(52):显示的活动com.touristeye.code / .LogIn:485918 ms(总计913151 ms)

谢谢

2 个答案:

答案 0 :(得分:3)

action:name扩展为<action>元素中的完整值。点前缀简写可能仅适用于组件元素(例如<service>)。

答案 1 :(得分: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接口实现使用,并在

中返回IBinder
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将被回调,您将使用此

获取服务接口
           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接口来调用和检索来自

的任何服务