5

我搜索了,但没有得到任何答案 当我们的手机连接到 Android Auto 时,是否有任何广播可以检测到?

我有这段代码,但需要由某个事件运行。

public static boolean isCarUiMode(Context c) {
UiModeManager uiModeManager = (UiModeManager) c.getSystemService(Context.UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) {
    LogHelper.d(TAG, "Running in Car mode");
    return true;
} else {
    LogHelper.d(TAG, "Running on a non-Car mode");
    return false;
}
4

1 回答 1

8

查看 UiModeManager 上的文档,我发现ACTION_ENTER_CAR_MODE以及ACTION_EXIT_CAR_MODE

使用这些,您可以像这样在清单中创建和注册接收器:

<receiver
  android:name=".CarModeReceiver"
  android:enabled="true"
  android:exported="true">
  <intent-filter>
    <action android:name="android.app.action.ENTER_CAR_MODE"/>
    <action android:name="android.app.action.EXIT_CAR_MODE"/>
  </intent-filter>
</receiver>

然后在接收器的实现中,你可以做这样的事情

public class CarModeReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
      if (UiModeManager.ACTION_ENTER_CAR_MODE.equals(action)) {
        Log.d("CarModeReceiver", "Car Mode");
      } else if (UiModeManager.ACTION_EXIT_CAR_MODE.equals(action)) {
        Log.d("CarModeReceiver", "Non-Car Mode");
      }
  }
}
于 2018-02-13T23:12:15.020 回答