记住 USB 连接,但不启动应用程序

Jay*_*der 6 android

我正在开发的应用程序通过 USB 连接与设备成功连接。

此外,它现在会记住来自不同启动的设备,正如以下存储 USB 默认连接的线程中所指出的那样。

但是,这会产生在连接 USB 设备时始终启动 Activity 的不良影响。在不启动应用程序的情况下,我无法记住默认值。在连接上启动应用程序并不是理想的效果。下面的小代码示例是清单当前的样子,以便快速浏览一下存储在内存中的默认 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>
Run Code Online (Sandbox Code Playgroud)

我一直在想,也许有一种类别可以添加到意图过滤器中,将其指定为不可启动的意图。在活动期间监听但由活动处理的东西。然而到目前为止,我还没有找到这个。

更新:

在清单中的服务或接收器内声明 USB 设备连接的意图也是存储连接信息的尝试。但是,只有活动中的 Intent 会记住连接状态,以便在稍后的给定时间点重新连接时不需要询问用户。看起来它的设计目的只是为了保存状态并在连接时启动应用程序。有点奇怪,但没有解决方法可以解决无法启动问题并记住 USB 连接设备的默认连接。

S.D*_*.D. 3

您不必总是启动活动。您可以让后台服务安静地处理意图。

<service android:name=".MyService">
     <intent-filter>
          <action  android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
     </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

更新:

您可能必须明确请求某些权限。这是你应该做的:

  1. 当用户安装应用程序并首次打开它时,请求 USB 相关权限。
  2. 如上所述,设置一个服务来处理 USB 连接事件。连接后,只要连接了已识别的设备,就会在状态栏中显示持久通知。
  3. 状态栏通知还可用于通知用户需要更多权限并且可以访问主 UI 活动。