2016-03-29 4 views
2

Я разрабатываю приложение для аудиопроигрывателя, и мне нужно определить, когда устройство пользователя подключено к Android Auto.Как определить, подключен ли телефон к андроиду

Приложение имеет будильник, и я хочу убедиться, что он не отключается во время вождения пользователя.

Чтобы определить, работает ли моя музыкальная служба (MediaBrowserService), я могу использовать некоторые флаги в onCreate и onDestroy или зарегистрировать reciver for "com.google.android.gms.car.media.STATUS" action - но это плохая идея, потому что будильник может запускаться в любое время. И не только когда моя музыка-сервис работает.

Для тревоги и я использую AlarmManager и в ожидании намерения.

Возможно, кто-то столкнулся с подобными проблемами?

+0

Вы когда-нибудь понять это? – codeman

ответ

0

Как вы упомянули, вы можете зарегистрировать приемник для "com.google.android.gms.car.media.STATUS" и сохранить его статус, например. shared preferences.

Когда приложение хочет отобразить будильник, оно может проверить сохраненный статус. Если статус подключен, не показывайте 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 
} 

Надежда, что помогает.

+0

Конечно, я это понимаю. И это то, что я сделал. Если моя служба запущена, я могу легко ее поймать и не показывать никаких сигналов. Но это абсолютно ** не решает проблему. Этот широковещательный приемник запускается ** только ** при запуске службы. Этот ресивер ** не уведомляет ** о том, что вы подключаете телефон к устройству авто android, он приходит только после начала вашего обслуживания. Но служба запускается, только если ** пользователь запускает ** приложение на устройстве Android-auto. Но что, если телефон подключен к андроиду, но пользователь не запускает приложение? Является ли это возможным? Конечно, возможно. – Sergey

+0

Итак, служба не запустится, Broadcast не придет, и в тревожное время я ошибаюсь, полагая, что телефон не подключен к автосооружению Android. Это проблема. Вот почему мне нужен способ узнать ** не о запуске моего сервиса **, мне нужен способ узнать о подключении телефона к устройству авто-андроида. – Sergey

+0

В вашем сервисе, что вы возвращаете в методе onStartCommand? Вы пытались вернуть Service # START_STICKY или Service # START_REDELIVER_INTENT? – hanif

2

Вы можете проверить UIMode как в примере Google:

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 результат

+2

Кто-нибудь испытал это? я всегда получаю «ложь». – cucko

+0

Я пробовал это, и, похоже, это работает, если вы периодически проверяете проверку в фоновом режиме.Это позволяет приложению улавливать случаи, когда событие 'com.google.android.gms.car.media.STATUS' не запускается, когда логически кажется, что оно должно (в моем случае я бы получил только' com.google .android.gms.car.media.STATUS', когда вы вручную переходите в раздел «Медиа» в Android Auto, который является инициированным пользователем действием _well после того, как Auto фактически подключается). Не кажется идеальным, но этого достаточно, чтобы пройти процесс обзора Google. – aroth

Смежные вопросы