如何检测手机是否连接到android auto

时间:2016-03-29 19:51:48

标签: java android alarmmanager android-auto

我正在开发音频播放器应用程序,我需要确定用户的设备何时连接到Android Auto。

该应用程序具有警报功能,我想确保在用户驾驶时它不会响起。

要确定我的音乐服务(MediaBrowserService)是否有效,我可以在onCreate和onDestroy中使用一些标志,或注册reciver for "com.google.android.gms.car.media.STATUS" action - 但这是一个坏主意,因为闹钟可以在任何时间触发。而且不仅在我的音乐服务正在运行时。

用于警报,我使用AlarmManager和未决意图。

也许有人遇到过类似的问题?

2 个答案:

答案 0 :(得分:2)

您可以像在google示例中一样检查UIMode:

https://github.com/googlesamples/android-UniversalMusicPlayer/blob/master/mobile/src/main/java/com/example/android/uamp/utils/CarHelper.java#L106

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;
    }
}

然后在运行警报检查isCarUiMode结果

之前

答案 1 :(得分:0)

正如您所提到的,您可以为"com.google.android.gms.car.media.STATUS"注册一个接收者并将状态保存到例如shared preferencesCONCAT

当应用程序想要显示警报时,它可以检查已保存的状态。如果状态已连接,则不显示alram,否则显示。

类似的东西:

public void onReceive(Context context, Intent intent) {
     String status = intent.getStringExtra("media_connection_status");
     boolean isConnectedToCar = "media_connected".equals(status);
     SharedPreferences sharedPrefs = context.getSharedPreferences(
            "myprefs", Context.MODE_PRIVATE);
     SharedPreferences.Editor editor = sharedPrefs.edit();
     editor.putBoolean("isConnected", isConnectedToCar);
     editor.commit();
}

触发警报时:

SharedPreferences sharedPrefs = context.getSharedPreferences(
            "myprefs", Context.MODE_PRIVATE);
boolean isConnected = sharedPref.getBoolean("isConnected", false);
if (!isConnected) {
   // Alarm
}

希望有所帮助。