Почему метод mConnection.onServiceConnected не вызывается - PullRequest
0 голосов
/ 27 июня 2018
public class DeviceScanActivity extends AppCompatActivity/*ListActivity*/ {
 @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        mHandler = new Handler();

        //mSend=new BluetoothSendRecv(cntxt);
        mActvty= this.getParent();
        visible = this.getIntent();
        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
        // Use this check to determine whether BLE is supported on the device.  Then you can
        // selectively disable BLE-related features.
        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
            finish();
        }
        // Initializes a Bluetooth adapter.  For API level 18 and above, get a reference to
        // BluetoothAdapter through BluetoothManager.
        mBluetoothManager =(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        mBluetoothAdapter = mBluetoothManager.getAdapter();
        // Checks if Bluetooth is supported on the device.
        if (mBluetoothAdapter == null ) {
            Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
            finish();
            return;
        }
        if( !mBluetoothAdapter.isEnabled())
        {
            Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBluetooth, 1);
        }
        if( !mBluetoothAdapter.isDiscovering()) {
            Intent discoverableIntent =
                    new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
            startActivity(discoverableIntent);
        }
        // Construct the data source

        ArrayList<ViewHolder> arrayOfUsers = new ArrayList<ViewHolder>();

       // Create the adapter to convert the array to views

         adapter = new UsersAdapter(this, arrayOfUsers);
         cntxt=this.getApplicationContext();
        ListView listView = (ListView) findViewById(R.id.mobile_list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                                    long id) {
                ViewHolder entry= (ViewHolder) parent.getAdapter().getItem(position);
                mAddress = entry.deviceAddress;
                Toast.makeText(cntxt, mAddress, Toast.LENGTH_SHORT).show();
                Intent i = new Intent(cntxt, BluetoothLeService.class);
                cntxt.startService(i);
                bindService(visible, mConnection, BIND_AUTO_CREATE);; //if checked, start service
                //final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
                //mBluetoothService.mBluetoothDeviceAddress=address;
                //mBluetoothService.mBluetoothManager=mBluetoothManager;
                //mBluetoothService.mBluetoothAdapter = mBluetoothAdapter;
                //mBluetoothService.mBluetoothGatt.connect();
                /*mBluetoothService.mBluetoothGatt = */
                //mSend.mBluetoothGatt=device.connectGatt(mActvty/*cntxt*/, false, mSend.mGattCallback);
                //mSend.mBluetoothDeviceAddress=address;
                //mSend.mBluetoothManager=mBluetoothManager;
                //mSend.mBluetoothAdapter = mBluetoothAdapter;
                //mSend.mBluetoothGatt.connect();
                //mBluetoothService.mBluetoothGatt=mBluetoothGatt;
                //Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
            }});
        ViewHolder newUser2 = new ViewHolder("adtv2","vvg2");
         adapter.add(newUser2);

    }
    ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            //Toast.makeText(Client.this, "Service is disconnected", 1000).show();
            mBounded = false;
            mBluetoothService = null;
        }
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //Toast.makeText(Client.this, "Service is connected", 1000).show();
            mBounded = true;
            BluetoothLeService.LocalBinder mLocalBinder = (BluetoothLeService.LocalBinder)service;
            Toast.makeText(cntxt, "Mithun", Toast.LENGTH_SHORT).show();
            mBluetoothService = mLocalBinder.getService();
            if (!mBluetoothService.initialize()) {
                //Log.e(TAG, "Unable to initialize Bluetooth");
                finish();
            }
            // Automatically connects to the device upon successful start-up
            // initialization.
            mBluetoothService.connect(mAddress);
        }
    };

создается первый менеджер Bluetooth. Из этого адаптера Bluetooth создается. Затем вызывается RequestPermission. Затем вызывается scanLeDevice. Сканирование Bluetooth выполняется за «период» секунд. Результат сохраняется в ArrayList. Adapter создается для ArrayList и view. Результат отображается в виде списка. При щелчке по каждому элементу списка вызывается метод onItemClick. Мы возвращаем обнаруженные характеристики устройства через адаптер. Назначение создается для сервиса. Сервису передается метод mConnection. Но метод onServiceConnected не вызывается, поскольку «Mithun» не печатается.

1 Ответ

0 голосов
/ 27 июня 2018

Вы перепутались с Intent. Должно быть.

 Intent i = new Intent(cntxt, BluetoothLeService.class);
 cntxt.startService(i);
 bindService(i, mConnection, BIND_AUTO_CREATE);

Также, если этот Service обслуживает только Activity, вам не нужно использовать startService(). Ограниченная служба и запущенная служба отличаются. Прочитайте Связанные службы и примите решение, нужна ли вам только Запущенная служба или Ограниченная служба. Принимая во внимание, что служба может быть запущена и ограничена как. Вы можете прочитать об этом больше в ссылке выше.

...