我正在开发音频播放器应用程序,我需要确定用户的设备何时连接到Android Auto。
该应用程序具有警报功能,我想确保在用户驾驶时它不会响起。
要确定我的音乐服务(MediaBrowserService
)是否有效,我可以在onCreate和onDestroy中使用一些标志,或注册reciver for "com.google.android.gms.car.media.STATUS" action - 但这是一个坏主意,因为闹钟可以在任何时间触发。而且不仅在我的音乐服务正在运行时。
用于警报,我使用AlarmManager
和未决意图。
也许有人遇到过类似的问题?
答案 0 :(得分:2)
您可以像在google示例中一样检查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
结果
答案 1 :(得分:0)
正如您所提到的,您可以为"com.google.android.gms.car.media.STATUS"注册一个接收者并将状态保存到例如shared preferences。 CONCAT
当应用程序想要显示警报时,它可以检查已保存的状态。如果状态已连接,则不显示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
}
希望有所帮助。