我正在开发一个音频播放器应用程序,我需要确定用户的设备何时连接到 Android Auto。
该应用程序具有警报功能,我想确保它在用户驾驶时不会响起。
要确定我的音乐服务MediaBrowserService
(可以随时触发。不仅在我的音乐服务运行时。
对于警报,我使用AlarmManager
和未决意图。
也许有人面临类似的问题?
我正在开发一个音频播放器应用程序,我需要确定用户的设备何时连接到 Android Auto。
该应用程序具有警报功能,我想确保它在用户驾驶时不会响起。
要确定我的音乐服务MediaBrowserService
(可以随时触发。不仅在我的音乐服务运行时。
对于警报,我使用AlarmManager
和未决意图。
也许有人面临类似的问题?
您可以像在谷歌示例中一样检查 UIMode:
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
结果之前
正如您所提到的,您可以为“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
}
希望有帮助。