別のアプリケーションが私のアプリにファイルを送信しているときに、intent.getExtras().get(EXTRA_STREAM)
プロパティを介して Uri を取得します。次に、inputstream を使用してファイルのバイトを取得できます。new BufferedInputStream(activity.getContentResolver().openInputStream(uri));
すべてが順調で、これまでのところ機能しています。今、ユーザーに何らかの進行状況を表示したいのですが、事前にストリームを完全に読み取らずにファイルの合計バイト数を取得する方法がわかりません (進行状況バーの目的全体が無効になります) ) ...
試してみParcelFileDescriptor fileDesc = activity.getContentResolver().openFileDescriptor(uri, "r");
ましたが、これはタイプの uris でのみ機能しfile://...
ます。
たとえば、Skydrive からファイルを受信すると、次のようにcontent://..
Uri を取得します。content://com.microsoft.skydrive.content.external/external_property/10C32CC94ECB90C4!155/Sunset.480p.mp4
そのような Uri では、(当然のことながら) "FileNotFoundException : ファイル全体ではありません" という例外が発生します。
私が取得するデータストリームの合計サイズを取得する確実な方法はありますか?