4

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

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

确定我的音乐服务MediaBrowserService(可以随时触发。不仅在我的音乐服务运行时。

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

也许有人面临类似的问题?

4

2 回答 2

5

您可以像在谷歌示例中一样检查 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结果之前

于 2017-01-30T08:14:59.170 回答
0

正如您所提到的,您可以为“com.google.android.gms.car.media.STATUS”注册一个接收者并将状态保存到例如共享首选项中。

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

就像是:

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
}

希望有帮助。

于 2016-03-29T20:31:46.167 回答