📜  如何确定Android中的当前Dock类型?

📅  最后修改于: 2021-05-13 15:25:18             🧑  作者: Mango

先决条件:如何检查Android设备是否处于Dock状态?

当将Android设备连接到电源或计量交换系统(涉及充电和多媒体交换)时,该设备被称为DOCKED。坞站状态与设备的充电状态密切相关。坞站状态提供有关充电或连接类型的见解。 Android设备可以对接几种扩展坞。例如,当Android设备通过兼容的USB电缆连接到诸如家庭音乐系统之类的音乐系统时,在高端办公桌中被称为DOCKED。同样,当将Android设备连接至车载充电器时,则将其放入汽车中。因此,基本上,有四种不同类型的基座:

  1. 桌子
  2. 低端(模拟)办公桌
  3. 高端(数字)办公桌
  • Car Dock: Car Dock是一个扩展坞,可让设备充电,并在连接时传输媒体。
  • 桌面坞站:桌面坞站是一个扩展坞,它是一种接口设备,使便携式计算机可以轻松地或毫不费力地连接到其他设备。扩展坞使移动设备可以将其转换为办公室或家庭中的台式计算机。
  • 低端工作台:这些扩展坞以较低的电流运行。例如:低输出电源(<1安培)
  • 高端服务台:这些扩展坞在较高的电流下运行。例如:快速充电器,高输出电源(2.1安培)

因此,在本文中,让我们确定Android中当前的坞站类型。请注意,我们将使用Kotlin语言实施此项目。

方法

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。

步骤2:使用activity_main.xml文件

activity_main.xml文件无关。因此,请保持文件原样。

XML


  
    
  


Kotlin
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
        // The dock-state details are included as an extra in a sticky broadcast of
        // the ACTION_DOCK_EVENT action. Because it's sticky, you can simply call
        // registerReceiver(), passing in null as the broadcast receiver.
        val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter ->
            applicationContext.registerReceiver(null, ifilter)
        }
  
        // dockState is an Integer value received when intent is passed
        val dockState: Int = dockStatus?.getIntExtra(Intent.EXTRA_DOCK_STATE, -1) ?: -1
  
        // isDocked is a Boolean value which if true indicates
        // the device is in dock state and vice-versa
        val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED
  
        // isCar and isDesk are a Boolean values, 
        // either of which if true indicates
        // the device is in a particular dock
        val isCar: Boolean = dockState == Intent.EXTRA_DOCK_STATE_CAR
        val isDesk: Boolean = dockState == Intent.EXTRA_DOCK_STATE_DESK
                || dockState == Intent.EXTRA_DOCK_STATE_LE_DESK
                || dockState == Intent.EXTRA_DOCK_STATE_HE_DESK
  
        // Output Cases
        when {
            isCar -> Toast.makeText(applicationContext, "Dock CAR", Toast.LENGTH_SHORT).show()
            isDesk -> Toast.makeText(applicationContext, "Dock DESK", Toast.LENGTH_SHORT).show()
            !isDocked -> Toast.makeText(applicationContext, "Not Docked", Toast.LENGTH_SHORT).show()
        }
    }
}


步骤3:使用MainActivity.kt文件

转到MainActivity.kt文件,并参考以下代码。下面是MainActivity.kt文件的代码。在代码内部添加了注释,以更详细地了解代码。

科特林

import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
        // The dock-state details are included as an extra in a sticky broadcast of
        // the ACTION_DOCK_EVENT action. Because it's sticky, you can simply call
        // registerReceiver(), passing in null as the broadcast receiver.
        val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter ->
            applicationContext.registerReceiver(null, ifilter)
        }
  
        // dockState is an Integer value received when intent is passed
        val dockState: Int = dockStatus?.getIntExtra(Intent.EXTRA_DOCK_STATE, -1) ?: -1
  
        // isDocked is a Boolean value which if true indicates
        // the device is in dock state and vice-versa
        val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED
  
        // isCar and isDesk are a Boolean values, 
        // either of which if true indicates
        // the device is in a particular dock
        val isCar: Boolean = dockState == Intent.EXTRA_DOCK_STATE_CAR
        val isDesk: Boolean = dockState == Intent.EXTRA_DOCK_STATE_DESK
                || dockState == Intent.EXTRA_DOCK_STATE_LE_DESK
                || dockState == Intent.EXTRA_DOCK_STATE_HE_DESK
  
        // Output Cases
        when {
            isCar -> Toast.makeText(applicationContext, "Dock CAR", Toast.LENGTH_SHORT).show()
            isDesk -> Toast.makeText(applicationContext, "Dock DESK", Toast.LENGTH_SHORT).show()
            !isDocked -> Toast.makeText(applicationContext, "Not Docked", Toast.LENGTH_SHORT).show()
        }
    }
}

根据状态,应用程序会显示Toast消息:将设备停靠在汽车中时显示“ Dock CAR”;如果停靠在桌面上则显示“ Dock DESK”;否则显示“ Not Docked”。输出不可用,但这是在Android中提取停靠状态的标准版本。

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处前往由我们的专家精心策划的指南,以使您立即做好行业准备!