Android 在片段中使用BLE函数而不是MainActivity
我正在尝试构建一个应用程序,它可以扫描其中一个片段中的BLE设备。我正在使用viewpager在选项卡之间移动。在其中一个片段中,我想使用BLE扫描函数。然而,由于属于Fragment的类,我不能使用代码所需的一些函数。有人能告诉我怎么解决吗。如何使用片段中的代码并在viewpager中调用它。还有一个刷新按钮,可以刷新列表Android 在片段中使用BLE函数而不是MainActivity,android,kotlin,Android,Kotlin,我正在尝试构建一个应用程序,它可以扫描其中一个片段中的BLE设备。我正在使用viewpager在选项卡之间移动。在其中一个片段中,我想使用BLE扫描函数。然而,由于属于Fragment的类,我不能使用代码所需的一些函数。有人能告诉我怎么解决吗。如何使用片段中的代码并在viewpager中调用它。还有一个刷新按钮,可以刷新列表 class Bluetooth : Fragment() { override fun onCreateView( inflate
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()
}
}
class蓝牙:片段(){
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回充气机。充气(R.layout.fragment\u蓝牙,容器,错误)
}
private fun isLocationPermissionEnabled():布尔值{
return ContextCompat.checkSelfPermission(**this**,Manifest.permission.ACCESS\u rough\u LOCATION)==PackageManager.permission\u provided
}
private val bleScanner=对象:ScanCallback(){
覆盖扫描结果(回调类型:Int,结果:ScanResult?){
super.onScanResult(回调类型、结果)
Log.d(“DeviceListActivity”,“onScanResult:${result?.device?.address}-${result?.device?.name}”)
}
覆盖BatchScanResults(结果:可变列表?){
super.onBatchScanResults(结果)
Log.d(“DeviceListActivity”,“onBatchScanResults:${results.toString()}”)
}
覆盖失败(错误代码:Int){
super.onscan失败(错误代码)
Log.d(“DeviceListActivity”,“onScanFailed:$errorCode”)
}
}
私人val bluetoothLeScanner:bluetoothLeScanner
得到(){
val bluetoothManager=**applicationContext**.getSystemService(Context.BLUETOOTH_服务)作为bluetoothManager
val bluetoothAdapter=bluetoothManager.adapter
返回bluetoothAdapter.bluetoothLeScanner
}
类ListDeviceAdapter(上下文:上下文,资源:Int):ArrayAdapter(上下文,资源)
重写创建时的乐趣(savedInstanceState:Bundle?){
Log.d(“DeviceListActivity”,“onCreate()”)
super.onCreate(savedInstanceState)
**setContentView**(R.layout.fragment\u蓝牙)
}
覆盖有趣的onStart(){
Log.d(“DeviceListActivity”,“onStart()”)
super.onStart()
bluetoothLeScanner.startScan(bleScanner)
}
覆盖桌面上的乐趣(){
bluetoothLeScanner.stopScan(bleScanner)
super.onStop()
}
}
我得到的错误是(this…)、setcontentview和(applicationcontext…),并在这里的代码中以粗体格式标记
这是我的主要活动:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val adapter = MyViewPagerAdapter(supportFragmentManager)
adapter.addFragment(Bluetooth(), "Devices")
adapter.addFragment(Information(), "Information")
adapter.addFragment(Log(), "Log")
viewpager.adapter = adapter
tabs.setupWithViewPager(viewpager)
refresh.setOnClickListener { Bluetooth() }
}
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {
private val fragmentlist: MutableList<Fragment> = ArrayList()
private val titlelist: MutableList<String> = ArrayList()
override fun getItem(position: Int): Fragment {
return fragmentlist[position]
}
override fun getCount(): Int {
return fragmentlist.size
}
override fun getPageTitle(position: Int): CharSequence? {
return titlelist[position]
}
fun addFragment(fragment: Fragment, title: String) {
fragmentlist.add(fragment)
titlelist.add(title)
}
}
class MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val适配器=MyViewPagerAdapter(supportFragmentManager)
adapter.addFragment(蓝牙(),“设备”)
adapter.addFragment(Information(),“Information”)
adapter.addFragment(Log(),“Log”)
viewpager.adapter=适配器
选项卡.使用viewpager进行设置(viewpager)
refresh.setOnClickListener{Bluetooth()}
}
类MyViewPagerAdapter(管理器:FragmentManager):FragmentPagerAdapter(管理器){
private val fragmentlist:MutableList=ArrayList()
private val titlelist:MutableList=ArrayList()
覆盖趣味getItem(位置:Int):片段{
返回碎片列表[位置]
}
重写fun getCount():Int{
返回fragmentlist.size
}
覆盖有趣的getPageTitle(位置:Int):字符序列{
返回标题列表[位置]
}
FunAddFragment(片段:片段,标题:字符串){
碎片列表。添加(碎片)
标题列表。添加(标题)
}
}
1。
您可以在片段中直接使用活动或上下文引用
因此,使用getActivity()
otgetContext()
方法,而不是使用this和applicationContext
二,。
删除创建时的
setContentView()
,因为您已经在onCreateView()
中正确地膨胀了视图,而且,您的错误与此无关。您的帖子具有误导性。这不是StackOverflow的工作原理,您应该继续原来的问题,而不是发布新的问题。