Android FilePicker диалог работает только на некоторых устройствах
Я использую обычный код для отображения диалогового окна File Picker на Android. Получив путь к файлу, я загружаю этот файл на свой сервер с помощью aQuery. Тем не менее, код работает только на моем старом телефоне Samsung, который работает на Android 4.1.2, но не на других устройствах. Я тестировал его на многих устройствах, но он работает только на устройствах Samsung с JellyBean.
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(minmeType);
intent.addCategory(Intent.CATEGORY_OPENABLE);
// special intent for Samsung file manager
Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
// if you want any file type, you can skip next line
sIntent.putExtra("CONTENT_TYPE", minmeType);
sIntent.addCategory(Intent.CATEGORY_DEFAULT);
Intent chooserIntent;
if (getPackageManager().resolveActivity(sIntent, 0) != null) {
// it is device with samsung file manager
chooserIntent = Intent.createChooser(sIntent, "Open file");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{intent});
} else {
chooserIntent = Intent.createChooser(intent, "Open file");
}
try {
startActivityForResult(chooserIntent, PICKFILE_REQUEST_CODE);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getApplicationContext(), "No suitable File Manager was found.\nPlease download a File Manager and try again.", Toast.LENGTH_LONG).show();
}
Код onActivityResult:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
fPath = data.getDataString();
File file = new File(fPath.substring(7));
params.put("file" + noFilesAttached, file);
noFilesAttached = noFilesAttached + 1;
path.setText(noFilesAttached + " files attached ");
upload.setText("Upload (" + noFilesAttached + ")");
upload.setVisibility(View.VISIBLE);
isUploaded = false;
}
super.onActivityResult(requestCode, resultCode, data);
}
Я попытался отредактировать fPath.substring(7) в fpath безуспешно, и я не хочу использовать какие-либо сторонние библиотеки.
Заранее спасибо.
2 ответа
Решение
Data.getData()
вернуть uri
; Вам нужен путь к файлу; Попробуйте найти способ трансформации uri
в filepath: возможно :
public static String getRealFilePath( final Context context, final Uri uri ) {
if ( null == uri ) return null;
final String scheme = uri.getScheme();
String data = null;
if ( scheme == null )
data = uri.getPath();
else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
data = uri.getPath();
} else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
Cursor cursor = context.getContentResolver().query( uri, new String[] { ImageColumns.DATA }, null, null, null );
if ( null != cursor ) {
if ( cursor.moveToFirst() ) {
int index = cursor.getColumnIndex( ImageColumns.DATA );
if ( index > -1 ) {
data = cursor.getString( index );
}
}
cursor.close();
}
}
return data;
}
Попробуйте использовать эту библиотеку
Эта библиотека может исправить ваши требования.