8

アプリ内に 2 つのアクティビティがあります。FirstActivityと言うSecondActivityFirstActivityMAIN および LAUNCHER アクティビティです。SecondActivityUSB デバイスを使用します。USB 許可のプロンプトが、アプリの有効期間内に 1 回だけ表示されるようにします。

アクティビティが 1 つしかない場合、マニフェストの次の行によって目的が解決されます。

<activity android:name=".FirstActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <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/usb_device_filter" />
</activity>

これは次のことを行っていました。

  1. USB デバイス (xml に記載) が接続されるたびに FirstActivity を起動すると、アプリがまだ開いていません。
  2. USB デバイスの許可を求めるプロンプトが 1 回だけ表示されます。

これを変更して次のことを達成するにはどうすればよいですか。

  1. SecondActivity が既に実行されていて、新しい USB デバイスが接続されている場合、アプリを再起動せずにデバイスを使用できる必要があります。したがって、次のように同じブロードキャストレシーバーを作成しました。

    public class TriggerReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
            read connected usb devices and register serial port call listener back.
        }
    }    
    

ただし、実行中にUSBデバイスが接続されると、問題がFirstActivity再び発生しSecondActivityます。どうすればこれを回避できますか?

必要に応じてさらに情報を追加します。どんな助けにも感謝します。

4

3 に答える 3

2

ただし、実行中にUSBデバイスが接続されると、問題がFirstActivity再び発生しSecondActivityます。どうすればこれを回避できますか?

これは難しいことではありません。AndroidManifest.xmlFirstActivityで、イベントが発生したときに起動する必要があることを文字通り宣言しますandroid.hardware.usb.action.USB_DEVICE_ATTACHED

このイベントのみを処理したい場合はSecondActivity、それに応じてマニフェストで宣言する必要があります。次に例を示します。

    <activity android:name=".FirstActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".SecondActivity" android:launchMode="singleTask">
        <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 デバイスが接続されているときはいつでも、SecondActivity起動のみになります。SecondActivityすでに実行されている場合、 にandroid:launchMode="singleTask"指定された属性により、再度 (または複数回) 起動されることはありませんSecondActivity。興味がある場合は、ここでさまざまな起動モードの詳細を読むことができます。

USB デバイスが接続されたときに起動する必要があることをマニフェストで宣言したためSecondActivity、Android システムは次の質問をします。

USB ダイアログ

「この USB デバイスにデフォルトで使用する」チェックボックスをオンにすると、再度尋ねられなくなります。これで、USB デバイスを接続するたびに、デバイスSecondActivityが起動し、必要な USB アクセス許可も自動的に受け取ります。

それがあなたの質問に答えているかどうか教えてください。

于 2016-10-24T10:39:16.513 に答える