2011-11-13 7 views
6

4つのUSBポートを持つ開発用デバイスとしてSonyインターネットテレビを使用して開発しています。外付けハードドライブでは、すべてのポートまたはすべてのポートを使用できます。外部メモリとデバイスの内部メモリを選択してアクセスする方法Google TVの外部メモリにアクセスするにはどうすればいいですか

私はSDカードにアクセスすることができるよ、または次を使用して、SDカードのような、少なくともどのようなテレビラベル:

Environment.getExternalStorageDirectory(); 

しかし、私は外付けUSBを見つける方法を見つけ出すように見えることはできませんデバイス。私はUsbManagerクラスのパスを下ろうとしましたが、より簡単でより一般的な方法であるように見えます。私はちょうど大容量のストレージデバイスを見ることができるようにしたいと思うし、ベンダーのIDなどをきれいにする必要はありませんが、多分私はそこに何かを欠いている。

これは、メニューを開いて「デバイスの選択」を選択したときに、Media Playerアプリが見つけたのと同じ機能を探しているので可能です。

私はドライブへの読み取りアクセスが必要ですが、読み書きは便利です。

ありがとうございます。

答えて

6

Google TV v2では、USBストレージのサポートに関するいくつかの変更がありました。 USBドライブの主な変更点は次のとおりです。
1.USBドライブは/ sdcardではなく/mnt/media/usb.XXXXXにマウントされます。 (XXXXXはUSBボリュームのID(ボリュームID:vfatまたはexfat、uuid:ntfs)で決まります)
2.GTVは複数のUSBドライブをサポートしています。ユーザーは複数のUSBドライブを接続できます。

MediaProviderは、すべての接続されたUSBボリューム内のすべてのメディアファイルにインデックスを付けます。そのため、アプリケーションはすべてのメディアファイルを取得するためにMediaProviderに対してクエリを実行できます。

サンプルコード:

カーソルカーソル= getContentResolver()クエリ(
Images.Media.EXTERNAL_CONTENT_URI、
新しいString [] {
Images.Media._ID、
Images.Media。DATA、//ファイルパス
}、
null、null、null);

ドライブが同期または取り出したとき、どのようにアプリケーションを検出することができます?:
あなたが Intent.ACTION_MEDIA_SCANNER_FINISHEDとIntent.ACTION_MEDIA_EJECTを受けるためにBroadcastReceiverを登録することができます。

+0

'/ mnt/media/usb.XXXXX'はSDK開発者が頼りにできるものですか?私はこれが他のどこにでも書かれていることを知らない。 IOW、これは、書籍の作者がおそらくGoogle TVを扱う書籍に含めるべきものなのでしょうか? :-)ありがとう! – CommonsWare

+0

私は数日後にあなたを見つけてお知らせします。 –

+2

現在、USBストレージAPIの計画はありません。 USBストレージにアクセスするには、MediaProviderを使用することをお勧めします。 –

1

だから、直感はUSB accessories apiを使用すると言います。しかし、これはアンドロイド3.1以上にしか使えません。私が正しく覚えていれば、3.0のAPIへのgoogleのtv adhers。いえ、ドキュメントから:

com.android.future.usb:アンドロイド2.3.4にUSBアクセサリモードをサポートするために、GoogleのAPIはアドオンライブラリバックポートUSBアクセサリAPIが含まれ、それらが中に含まれていますこの名前空間。

したがって、Google APIs add-on libraryでUSBメモリにアクセスしてください。

+0

実際、彼らは3.1で出荷しています。私はUSBアクセサリーのAPIを調べます。ありがとうございました。 – dzimney

1

しかし、私は外付けUSBデバイスを見つける方法を見つけることができないようです。

外部USBドライブ用のAndroid SDKに正式なサポートはありません。 Google TVの開発者向けドキュメントでは、この分野に何か追加したことを示すものは何もありません。

+0

USBアクセサリAPIは外付けUSBデバイスでは動作しませんか? –

+0

@KurtisNusbaum:たとえば、JavaでUSB大容量ストレージモードを実装することはできません。 「USBアクセサリモードでは、Android搭載デバイス用に設計されたUSBホストハードウェアを接続できます。アクセサリは、Androidアクセサリ開発キットのドキュメントに記載されているAndroidアクセサリプロトコルに準拠している必要があります。これはUSBマスストレージモードではありません。 USBドライブを差し込むと自動マウントされるはずですが、マウントポイントを見つけて書き込み可能かどうかを判断する公式のAPIはありません。 – CommonsWare

+1

大容量ストレージデバイスは「アクセサリ」ではなく「デバイス」であるようです。私はまだ問題を解決しており、大量の記憶装置として(プログラム的に)デバイスを認識できるようにはなっていません。現在、私はデバイスのリストを見ることができますが、私のUSB大容量ストレージデバイスはUsbConstantsを返しません。 USB_CLASS_MASS_STORAGE [link](http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_MASS_STORAGE)[/ link]をデバイスクラスとして使用します(Device.getDeviceClassを使用)。おそらく、GoogleはUSBパッケージを完全にフラッシュしていません。 – dzimney

0

あなたはどのgetExternalXXX()でのUSBデバイスにアクセスすることはできません、とMediaProviderを経て、あなたは、メディア(例えば無.TXT)として分類されたファイルのみのフラットコレクション(ディレクトリ構造が失われている)を持っています。

私はlibmediaを開発しました。 Sony NSZ-GS7でテスト済みです。

サンプルコード:

VolumeManager volumeManager = new VolumeManager(); 
List<Volume> volumes = volumeManager.getVolumes(); 
for (Volume volume: volumes) { 
    String label = volume.getLabel(); 
    File rootFolder = volume.getRoot(); 
    File[] files = rootFolder.listFiles(); 
    for (File file: files) { 
     String filename = file.getName(); 
    } 
} 
関連する問題