1

USB経由で接続されたデバイスと通信したいAndroidアプリを開発しています。このデバイスは常にデータを配信しています。これらのデータは、Android Linux シェルのプログラムで表示できます。

私の目標は、アプリでこれらのデータを確認し、その後、サービスを介して他のアプリに配信することです。

私の質問は次のとおりです。AndroidアプリからUSBポートへの接続を「開く」ことができるので、USBデバイスから送信されたデータをアプリで継続的に受信できますか? はいの場合、コードはどのようになりますか?

*編集

回答ありがとうございます。アプリ自体はコマンドラインで実行されなくなりました。そのため、実行可能ファイルはもうありませんが、Android アプリによって共有ライブラリが読み込まれます。以前はそうでしたが、アプリで NDK メソッドを使用して接続を開始し、アプリ自体でデータを表示できるようにしたいと考えています。そのため、接続がすでに開いているかどうかを確認しようとしました。

コードにいくつかの関数を追加したので、USB 接続が開いているかどうか、およびその USB デバイスへのアクセス許可があるかどうかを確認できます。

UsbManager.hasPermission(device)

itent フィルターを使用しているため、true を返します。

UsbManager.openDevice(device)

UsbDeviceConnection を返すので、そのデバイスを使用するためのアクセス権があるようです。

これまでのところ、USBデバイスによるバス接続の開始と、そのデバイスのデータ入力の取得のいずれかを受信することができません。

私のネイティブ コードには既に while(true)-メソッドがあり、実際に USB デバイスを介してデータが送信されるときにコールバックのみを使用してアプリにデータを送信するため、C コードで作業を完了させたいと考えています。

私のアプリが行うべき唯一の仕事は、バス接続を一度開いてから、C コードからのコールバックの準備を整えることです。

それは可能ですか?

4

1 に答える 1

0

コマンド ラインで実行するアプリがある場合は、実際にアプリ内からコマンド ラインを実行できます。詳細については、ProcessクラスとProcessBuilderドキュメントを参照してください。与えられた例は以下のとおりです

/system/bin/ping を実行して android.com に ping を実行するには:

  Process process = new ProcessBuilder()
       .command("/system/bin/ping", "android.com")
       .redirectErrorStream(true)
       .start();
   try {
     InputStream in = process.getInputStream();
     OutputStream out = process.getOutputStream();

     readStream(in);

    finally {
     process.destroy();
   }
 }
于 2013-07-14T17:02:09.507 に答える