Java 如何检测手机是否连接到android auto
我正在开发一个音频播放器应用程序,我需要确定用户的设备何时连接到Android Auto 该应用程序具有一个警报功能,我想确保它不会在用户开车时熄灭 为了确定我的音乐服务(Java 如何检测手机是否连接到android auto,java,android,alarmmanager,android-auto,Java,Android,Alarmmanager,Android Auto,我正在开发一个音频播放器应用程序,我需要确定用户的设备何时连接到Android Auto 该应用程序具有一个警报功能,我想确保它不会在用户开车时熄灭 为了确定我的音乐服务(MediaBrowserService)是否正常工作,我可以在onCreate和onDestroy或register中使用一些标志,但这不是一个好主意,因为闹钟可以随时触发。不仅是在我的音乐服务运行时 对于报警,我使用AlarmManager和挂起意图 可能有人面临类似问题?如您所述,您可以为注册接收者并将状态保存到例如 当应
MediaBrowserService
)是否正常工作,我可以在onCreate和onDestroy或register中使用一些标志,但这不是一个好主意,因为闹钟可以随时触发。不仅是在我的音乐服务运行时
对于报警,我使用AlarmManager
和挂起意图
可能有人面临类似问题?如您所述,您可以为注册接收者并将状态保存到例如 当应用程序想要显示报警时,它可以检查保存的状态。如果状态为已连接,则不显示alram,否则显示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
}
希望对您有所帮助。您可以像谷歌示例中那样检查UIMode:
然后在运行报警检查之前,
isCarUiMode
result我当然理解这一点。我就是这么做的。如果我的服务正在运行,我可以很容易地捕捉到它,并且不显示任何警报。但这绝对不能解决问题。此广播接收器仅在启动“我的服务”时触发。此接收器不会通知您将手机连接到自动android设备,它仅在您的服务启动时发出。但只有当用户在android自动设备上启动应用程序时,服务才会启动。但如果手机连接到android auto,但用户不启动应用程序,该怎么办?可能吗?当然有可能。所以服务不会启动,广播也不会出现,在闹钟响的时候,我错误地认为手机没有连接到android auto。这是个问题。这就是为什么我需要一种方式来了解我的服务的启动,我需要一种方式来了解如何将手机连接到自动android设备。在您的服务中,您在onStartCommand方法中返回什么?您是否尝试过返回服务#启动#粘性或服务#启动#重新提交#意图?对于android auto来说,这并不重要。我不重写这个方法。当您启动服务(MediaBrowserService)时,onStartCommand方法未被调用(几分钟前,我专门重写了此方法,并运行应用程序,但尚未调用此方法)。早些时候,我写道,当手机连接到自动安卓设备时,安卓自动绝对没有义务运行我的服务,这是正常的。你有没有发现这一点?有人对此进行过测试吗?我总是得到“假”。我试过这个,如果你在后台周期性地循环检查,它似乎有效。这样做可以让应用程序捕捉到com.google.android.gms.car.media.STATUS事件在逻辑上似乎应该触发的情况(在我的例子中,当手动导航到android Auto的“媒体”部分时,我只会获得com.google.android.gms.car.media.STATUS
,这是一个用户发起的操作,在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;
}
}