2013-08-05 2 views
3

Приложение, над которым я работаю, успешно подключается к устройству через USB-соединение.Помните USB-соединение, но не запускайте приложение

Кроме того, он теперь запоминает устройство с разных запусков, как указано в следующей строке storing usb default connections.

Однако это оставляет нежелательный эффект при запуске Activity при подключении USB-устройства. Я не смог вспомнить значения по умолчанию без запуска приложения. Запуск приложения на соединение не является желаемым эффектом. Ниже приведены примеры небольшого кода, с которыми в настоящее время выглядит манифест, чтобы быстро получить соединения USB по умолчанию, хранящиеся в памяти для будущих подключений. Можно ли выполнить это хранение по умолчанию без запуска приложения?

<activity 
    android:name="com.MainScreen" 
    android:theme="@style/Theme.Default" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
    </intent-filter> 
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
       android:resource="@xml/device_filter" /> 
</activity> 

Я думал, что, возможно, был типом категории, что я мог бы добавить к умысел фильтру, который будет указывать его как не спускаемое намерение. Что-то, что слушали во время активности, но обрабатывалось этой деятельностью. Пока что я этого не нашел.

Обновление:

Объявление намерения для подключения USB-устройства в пределах службы или приемника в манифеста также была попытка хранить информацию о соединении. Однако только намерение внутри действия запоминает состояние соединения, так что ему не нужно запрашивать у пользователя последующее время, когда оно будет повторно подключено в более поздний момент времени. Похоже, что он предназначен только для сохранения состояния в сочетании с запуском приложения, когда он подключен. Немного странно, но нет обходного пути для получения без запуска в сочетании с запоминанием соединения по умолчанию для USB-устройства.

ответ

3

Вам не нужно запускать деятельность всегда. Вы можете позволить фоновой службе обрабатывать намерение спокойно.

<service android:name=".MyService"> 
    <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
    </intent-filter> 
</service> 

Обновление:

Вы, возможно, придется запросить некоторые права в явном виде. Вот что вы должны сделать:

  1. Когда пользователь устанавливает приложение и открывает его в первый раз, попросите разрешения, связанные с USB.
  2. Установите сервис для обработки события USB-подключения, как указано выше. При подключении отображает постоянное уведомление в строке состояния, пока подключено распознанное устройство.
  3. Уведомление о статусной строке также полезно, чтобы уведомить пользователя о том, что требуется больше разрешений и доступ к основному пользовательскому интерфейсу.
+0

Устройство не запомнится из службы. Поэтому при установке фильтра может не запускаться устройство при подключении, но оно также не запоминает устройство, когда оно подключено, а затем отключено. Это помнит и не запускал комбинированные, что я не могу получить в результате. –

+0

@JaySnayder 'Устройство не запомнится из службы. , , Зачем ? –

+0

Это было обнаружено в результате исследований других статей. В парах статей упоминалось создание небольших операций-оболочек для службы, чтобы запомнить ответ по умолчанию, когда устройство подключается к последующему времени. Я решил попробовать все равно, но он не будет помнить о решении пользователей в службе. –

2

Вы должны сделать небольшой редизайн.

Создайте Service и запустите логику, как «При подключении USB-устройства» и т. Д. (Возможно, у вас есть они в этой деятельности сейчас) в этой службе.

Кстати, вы всегда можете эффективно использовать ваш MainActivity или вне его.

+0

Обработка сообщений USB в сервисе, вероятно, является правильным путем, а не обработкой его в моей деятельности и использованием AsyncTasks для определенных задач. Тем не менее, я не совсем понимаю, как использовать службу при сохранении значений по умолчанию. Помещение намерения там в сервисе, похоже, не запоминает выбранные пользователем значения по умолчанию при запоминании устройства. –

1

Я могу подтвердить своими экспериментами, что устройство USB не запомнится из службы. Кажется, что requestPermission() должен выйти из Activity.

Чтобы избежать запуска деятельности, я осуществил onPostCreate() так:

@Override // from Activity 
public void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 

    Intent triggerIntent = getIntent(); 
    if (triggerIntent != null) { 
     if (! triggerIntent.hasCategory(Intent.CATEGORY_LAUNCHER)) { 
      Log.e(LOGTAG, "not started by launcher! exit now."); 
      finish(); 
     } 
    } 
} 

Я использовал onPostCreate() вместо вставки кода в OnCreate(), так как при вызове закончить() из onCreate() он вызовет onDestroy() для вызова сразу, и обычно не все члены класса Activity настроены правильно. Мне кажется более безопасным использование метода onPostCreate().

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