我遇到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)
谢谢
答案 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接口实现使用,并在
中返回IBinderprivate 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接口来调用和检索来自
的任何服务