在片段而不是MainActivity中使用BLE功能

时间:2019-07-12 05:14:56

标签: android kotlin

我正在尝试构建一个可在其中一个片段中扫描BLE设备的应用程序。我正在使用viewpager在选项卡之间移动。在其中一个片段中,我想使用BLE扫描功能。但是由于属于Fragment的类,我无法使用代码所需的某些功能。谁能告诉我如何解决。我如何在片段中使用代码并在viewpager中调用它。还有一个刷新按钮可以刷新列表,

product_id

我遇到的错误是(this .....),setcontentview和(applicationcontext ....),并在此处的代码中以粗体标记。

这是我的主要活动

class Bluetooth : Fragment() {

        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            return inflater.inflate(R.layout.fragment_bluetooth, container, false)
        }

        private fun isLocationPermissionEnabled(): Boolean {
            return ContextCompat.checkSelfPermission(**this**, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
        }

        private val bleScanner = object : ScanCallback() {
            override fun onScanResult(callbackType: Int, result: ScanResult?) {
                super.onScanResult(callbackType, result)
                Log.d("DeviceListActivity", "onScanResult: ${result?.device?.address} - ${result?.device?.name}")
            }

            override fun onBatchScanResults(results: MutableList<ScanResult>?) {
                super.onBatchScanResults(results)
                Log.d("DeviceListActivity", "onBatchScanResults:${results.toString()}")
            }

            override fun onScanFailed(errorCode: Int) {
                super.onScanFailed(errorCode)
                Log.d("DeviceListActivity", "onScanFailed: $errorCode")
            }

        }

        private val bluetoothLeScanner: BluetoothLeScanner
            get() {
                val bluetoothManager = **applicationContext**.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
                val bluetoothAdapter = bluetoothManager.adapter
                return bluetoothAdapter.bluetoothLeScanner
            }

        class ListDevicesAdapter(context: Context, resource: Int) : ArrayAdapter<String>(context, resource)

        override fun onCreate(savedInstanceState: Bundle?) {
            Log.d("DeviceListActivity", "onCreate()")
            super.onCreate(savedInstanceState)
            **setContentView**(R.layout.fragment_bluetooth)
        }

        override fun onStart() {
            Log.d("DeviceListActivity", "onStart()")
            super.onStart()

            bluetoothLeScanner.startScan(bleScanner)

        }

        override fun onStop() {
            bluetoothLeScanner.stopScan(bleScanner)
            super.onStop()
        }
    }

1 个答案:

答案 0 :(得分:0)

1。 您可以在片段中直接使用活动上下文引用。

因此,使用ID | HasNumber --------------- 1 | true 2 | false 3 | true evt.target.value = null; 方法代替使用 this applicationContext

2。 从创建时删除getActivity(),因为您已经在getContext()中正确地放大了视图。