Android 4.4でストレージアクセスフレームワークを使用し、ファイルピッカーを開きます。
Googleドライブからファイルを選択する場合を除き、すべてが機能します。入力ストリームとして開く方法しかわかりませんが、Java Fileオブジェクトを取得したいと思います。
返されるコンテンツURIは、content://com.google.Android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279のようになります。
他の同様の質問ですが、ファイル名、ファイルサイズ、コンテンツを取得できる実用的なソリューションがありません:
Paul BurkeのFileChooser( https://github.com/iPaulPro/aFileChooser )も調べましたが、これは問題のリストで最も一般的な質問です。
そのコンテンツURIからファイルを取得するにはどうすればよいですか?
私の現在の回避策は、入力ストリームから一時ファイルを書き出すことです。
ありがとう!
OK。正しい方法は、contentresolverからのデータと一緒に他の投稿からの入力ストリームを使用することであることがわかりました。
参考のために、見つけるのが難しいAndroid docs: https://developer.Android.com/training/secure-file-sharing/retrieve-info.html
Mimetype、filename、filesizeを取得する関連コード:
Uri returnUri = returnIntent.getData();
String mimeType = getContentResolver().getType(returnUri);
Cursor returnCursor =
getContentResolver().query(returnUri, null, null, null, null);
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
returnCursor.moveToFirst();
TextView nameView = (TextView) findViewById(R.id.filename_text);
TextView sizeView = (TextView) findViewById(R.id.filesize_text);
nameView.setText(returnCursor.getString(nameIndex));
sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex)));
ファイルの内容を取得するには:
getContentResolver().openInputStream(uri)
これが誰かの助けになることを願っています。
このコードは、Googleドライブから画像を選択しようとしたときに問題を解決しました、アプリがクラッシュしました、
private void setImagePath(Intent data) throws Exception {
String wholeID="";
Uri selectedImage = data.getData();
if(Build.VERSION.SDK_INT<=Build.VERSION_CODES.JELLY_BEAN_MR2){
wholeID=getUriPreKitkat(selectedImage);
}else {
wholeID = DocumentsContract.getDocumentId(selectedImage);
}
// Split at colon, use second item in the array
Log.i("debug","uri google drive "+wholeID);
String id = wholeID.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getActivity().getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{id}, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
}