java - 如何为android绑定(bind)多个不同的服务?

标签 java android service android-service

我想在 Activity 开始时启动 2 个服务,但只有第一个启动,第二个在 bindService() 失败.只有当我想对它给我一个空指针的服务做某事时,没有错误。我也试图等待做某事,但服务永远不会启动。
这两项服务非常相似,我只想知道实现有什么问题。我尝试调试和bindservice() startSoundmanagerService 的函数返回 0,可能是问题的根源,但我不知道为什么。

public class SimulationActivity extends AppCompatActivity {

    BluetoothService BService;
    boolean mBound = false;
    SoundManager SService;
    boolean sBound = false;

    @Override
    protected void onStart() {
        super.onStart();
        if (bluetoothAdapter.isEnabled()) {
            setStatusText("Bluetooth on");
        }
        else {
            setStatusText("Bluetooth off");
        }
        if(!mBound) {
            startServer();
        }
        conStatImageView.setImageResource(R.drawable.connection_off);
        if(!sBound){
            startSoundManagerService();
        }

    @Override
    protected void onStop() {
        super.onStop();
        if(mBound) {
            unbindService(bConnection);
            mBound = false;
        }
        if(sBound){
            unbindService(sConnection);
            sBound = false;
        }


    }

    private ServiceConnection bConnection = new ServiceConnection() {

        @Override
        public void onServiceConnected(ComponentName className,
                                        IBinder service) {
                BluetoothService.LocalBinder binder = 
                (BluetoothService.LocalBinder) service;

                BService = binder.getService();
                mBound = true;
        }

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

    private ServiceConnection sConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName className,
                                    IBinder service) {
        
            SoundManager.LocalBinder binder = (SoundManager.LocalBinder) service;
            SService = binder.getService();
            sBound = true;
    }

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


    public void startServer(){

        if (bluetoothAdapter == null) {
            Log.d("tag","Device doesn't support Bluetooth") ;
        }

        if (!bluetoothAdapter.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        }
        if(bluetoothAdapter.isEnabled()){
            startBluetoothservice();
        }

    }

    private void startBluetoothservice(){

        Intent intent = new Intent (this,BluetoothService.class);
        bindService(intent, bConnection, Context.BIND_AUTO_CREATE);
        Log.i(TAG,"Trying to start bluetoothservice");
    }
    private void startSoundManagerService(){

        Intent intent = new Intent (this,SoundManager.class);
        bindService(intent, sConnection, Context.BIND_AUTO_CREATE);
        Log.i(TAG,"Trying to start soundservice");

    }
那么如何在 1 个 Activity 中实现 2 个不同的服务呢?
编辑解决方案:我忘记在 list 文件中注册服务。 ;)

最佳答案

我找到了解决方案:我忘记在 list 中注册第二个服务。就这样 ;)

关于java - 如何为android绑定(bind)多个不同的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434740/

相关文章:

android - 在ActionScript Mobile(Android)项目中从SD卡获取数据?

android - 使用ServiceTestCase访问JUnit的资源

java - 如何将InputMethodService与服务连接?

java - 确定一个值是否在 Java 中的一组值中的最快方法是什么?

java - 将特定长度的字符数组转换为字符串

java - 如何修复 JavaFX 中值更改的这个错误?

java - 我的Warshall算法缺少什么?

java - ListView 中的 Json 解析

每次更改时,Android Studio 设计屏幕都会滚动到顶部

android - 线程和处理程序