gpt4 book ai didi

java - bindservice 不会启动服务并且 onserviceconnect 不会调用

转载 作者:行者123 更新时间:2023-12-02 01:53:08 52 4
gpt4 key购买 nike

我正在尝试构建并运行一个用于 react native 应用程序的服务,在该服务运行后,我需要调用一些服务方法,这意味着我需要获取正在运行的服务的实例,所以我正在尝试使用bindservice()。

问题是当我调用bindservice()时,onServiceConnected()和onStartCommand()不会启动,另一方面服务中的onBind()正在启动。

我尝试过的所有答案都没有帮助,这是其中的一部分:

ServiceConnection.onServiceConnected() never called after binding to started service onServiceConnected never called after bindService method ServiceConnection::onServiceConnected not called even though Context::bindService returns true? OnServiceConnected not getting called

提前致谢。

<小时/>

这是服务:

public class TestService extends Service {
private LocalBinder mBinder = new LocalBinder();
private Intent serviceIntent;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Log.i("service", "service starting!!@!@!@ ");

return START_STICKY;
}

@Override
public void onDestroy() {
super.onDestroy();
Log.i("EXIT", "ondestroy!");
Intent broadcastIntent = new Intent("com.testapp.service.RestartTest");
sendBroadcast(broadcastIntent);
}

@Override
public void onTaskRemoved(Intent rootIntent) {
Intent broadcastIntent = new Intent("com.testapp.service.RestartTest");
sendBroadcast(broadcastIntent);
super.onTaskRemoved(rootIntent);
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}

public class LocalBinder extends Binder {
TesService getService() {
return TestService.this;
}
}

}

react native 的包:

public class TestPackage implements ReactPackage {

private ReactApplicationContext applicationContext;
TestService runningService;
boolean mBound = false;

@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}

@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
runningService = new TestService(reactContext);
Intent serviceIntent = new Intent(reactContext, runningService.getClass());
reactContext.bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
modules.add(runningService.someMoudle());
return modules;
}

/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() {

@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
runningService = ((LocalBinder) service).getService();
mBound = true;
}

@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
}

AndroidManifest.xml 包含

<service
android:name=".TestService">
</service>

最佳答案

API.java

public class Api extends ReactContextBaseJavaModule {
public KeyStoreApi(ReactApplicationContext reactContext){
super(reactContext);
}

....

@ReactMethod
public void connect(Promise promise){

ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
...
}

@Override
public void onServiceDisconnected(ComponentName name) {
...
}
};

Intent intent = new Intent();
intent.setAction(...);
intent.setClassName(...);
getReactApplicationContext().bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);

}
}

ApiPackage.java

public class KeyStoreApiPackage implements ReactPackage {

@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext){
return Collections.emptyList();
}

@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext){
List<NativeModule> modules = new ArrayList<>();
modules.add(new Api(reactContext));
return modules;
}
}

我也遇到了同样的问题,然后我发现了你的问题。所以,我想分享我的解决方案。这对我来说很有用。

尽管如此,对你来说已经很晚了,我想帮助别人。

关于java - bindservice 不会启动服务并且 onserviceconnect 不会调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691549/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com