setdataandtype intent flag_activity_new_task action_get_content android android-intent

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

¿Cómo puedo determinar si Android puede manejar PDF?


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.