Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测手机是否连接到android auto_Java_Android_Alarmmanager_Android Auto - Fatal编程技术网

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

Java 如何检测手机是否连接到android auto,java,android,alarmmanager,android-auto,Java,Android,Alarmmanager,Android Auto,我正在开发一个音频播放器应用程序,我需要确定用户的设备何时连接到Android Auto 该应用程序具有一个警报功能,我想确保它不会在用户开车时熄灭 为了确定我的音乐服务(MediaBrowserService)是否正常工作,我可以在onCreate和onDestroy或register中使用一些标志,但这不是一个好主意,因为闹钟可以随时触发。不仅是在我的音乐服务运行时 对于报警,我使用AlarmManager和挂起意图 可能有人面临类似问题?如您所述,您可以为注册接收者并将状态保存到例如 当应

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

该应用程序具有一个警报功能,我想确保它不会在用户开车时熄灭

为了确定我的音乐服务(
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;
    }
}