flag_activity_new_task - ¿Cómo hacer un archivo intent.setType para pdf, xlsx y txt para android?
action_get_content (6)
Debe usar la función del sistema para encontrar el mimeType específico del archivo al que está tratando de acceder (como la "aplicación / pdf"). Si está tratando con un tipo desconocido, probablemente será difícil encontrar el tipo. Espero que este código te salve!
String url=Environment.getExternalStorageDirectory().getAbsolutePath()+"/Saves/contacts.vcf";
File file = new File(url);
Intent intent = new Intent(Intent.ACTION_VIEW);
String mimeType=MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url));
intent.setDataAndType(Uri.fromFile(file), mimeType);
Intent intent1 = Intent.createChooser(intent, "Open With");
startActivity(intent1);
Fuente HERE
Quiero elegir solo archivos pdf, xlsx y txt del almacenamiento, pero intent.setType puede hacer solo un archivo (por ejemplo, solo archivo de texto (o) solo archivo de pdf). ¿Es posible obtener los tres archivos codificando intent.setType () y hay alguna forma de hacerlo?
Aquí está algo de mi código.
private void showFileChooser() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(
Intent.createChooser(intent, "Select txt file"),
0);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
}
}
Debería consultar este enlace http://www.androidsnippets.com/open-any-type-of-file-with-default-intent.html . También lea a través de Mime Type.
Así es como he implementado para cualquier archivo o archivo de tipo mime seleccionado
String[] mimeTypes =
{"image/*","application/pdf","application/msword","application/vnd.ms-powerpoint","application/vnd.ms-excel","text/plain"};
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
if (mimeTypes.length > 0) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
}
} else {
String mimeTypesStr = "";
for (String mimeType : mimeTypes) {
mimeTypesStr += mimeType + "|";
}
intent.setType(mimeTypesStr.substring(0,mimeTypesStr.length() - 1));
}
startActivityForResult(Intent.createChooser(intent,"ChooseFile"), 0);
La manera de @Fatehali Asamadi está bien, pero es necesario agregar algo para un uso apropiado. Para los documentos de Microsoft se utilizan las extensiones (.doc o .docx), (.ppt o .pptx), (.xls o .xlsx). Para admitir o explorar estas extensiones, debes agregar más mimeTypes.
Utilice el método a continuación para buscar documentos en los que REQUEST_CODE_DOC es requestCode para onActivityResult (int finalCatPode, int int final, código de Intención final) @Override method.
private void browseDocuments(){
String[] mimeTypes =
{"application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
"application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx
"application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx
"text/plain",
"application/pdf",
"application/zip"};
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
if (mimeTypes.length > 0) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
}
} else {
String mimeTypesStr = "";
for (String mimeType : mimeTypes) {
mimeTypesStr += mimeType + "|";
}
intent.setType(mimeTypesStr.substring(0,mimeTypesStr.length() - 1));
}
startActivityForResult(Intent.createChooser(intent,"ChooseFile"), REQUEST_CODE_DOC);
}
Puede obtener un concepto claro y agregar sus mimeTypes requeridos desde Here
Parece que solo quieres ver si esos intentos pueden resolverse. Este podría ser un mejor enfoque:
private void showFileChooser() {
Intent intentPDF = new Intent(Intent.ACTION_GET_CONTENT);
intentPDF.setType("application/pdf");
intentPDF.addCategory(Intent.CATEGORY_OPENABLE);
Intent intentTxt = new Intent(Intent.ACTION_GET_CONTENT);
intentTxt.setType("text/plain");
intentTxt.addCategory(Intent.CATEGORY_OPENABLE);
Intent intentXls = new Intent(Intent.ACTION_GET_CONTENT);
intentXls.setType("application/x-excel");
intentXls.addCategory(Intent.CATEGORY_OPENABLE);
PackageManager packageManager = getPackageManager();
List activitiesPDF = packageManager.queryIntentActivities(intentPDF,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafePDF = activitiesPDF.size() > 0;
List activitiesTxt = packageManager.queryIntentActivities(intentTxt,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafeTxt = activitiesTxt.size() > 0;
List activitiesXls = packageManager.queryIntentActivities(intentXls,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafeXls = activitiesXls.size() > 0;
if (!isIntentSafePDF || !isIntentSafeTxt || !isIntentSafeXls){
// Potentially direct the user to the Market with a Dialog
}
}
Referencias:
http://developer.android.com/training/basics/intents/sending.html
Puedes usar Intent.ACTION_OPEN_DOCUMENT,
Cada documento se representa como un contenido: // URI respaldado por un DocumentsProvider
, que se puede abrir como una secuencia con openFileDescriptor(Uri, String)
, o consultar los metadatos de DocumentsContract.Document
.
Todos los documentos seleccionados se devuelven a la aplicación de llamada con permisos de escritura y escritura persistentes. Si desea mantener el acceso a los documentos durante los reinicios del dispositivo, debe tomar explícitamente los permisos persistentes mediante takePersistableUriPermission(Uri, int)
.
Las personas que llaman deben indicar los tipos MIME de documentos aceptables a través de setType(String)
. Por ejemplo, para seleccionar fotos, use image/*
. Si varios tipos de MIME EXTRA_MIME_TYPES
son aceptables, EXTRA_MIME_TYPES
en EXTRA_MIME_TYPES
y setType(String)
a */*
.
Para más detalles, consulte este enlace.
http://developer.android.com/reference/android/content/Intent.html#ACTION_OPEN_DOCUMENT
Tenga en cuenta que esto solo está disponible en el nivel de API 19+.
intent.setType("image/*|application/pdf|audio/*");
Tal vez esto es lo que quieres.