Registra attività per aprire qualsiasi file con una certa estensione

Ho lavorato su un'applicazione che è impostata per aprire un file con un'estensione specifica. Funziona alcune volte con Gmail (alcuni file sono aperti, mentre alcuni non lo fanno) e posso aprire un file dall'esploratore di file.

Non riesco ad aprire i file dall'applicazione Email sul telefono ma e come dico, alcuni file non si aprono dall'applicazione Gmail con la mia applicazione e alcuni fanno!

  • Come registro il mio account Google nell'emulatore android in esecuzione a livello 2.2 api 8?
  • Angoli arrotondati pulsanti di image android
  • Errore java.lang.ClassNotFoundException: com.google.android.gms.maps.Fragment di fotoricettore in Google Map V2
  • Voglio avere un numero di settimane in un mese particolare
  • Imposta switchStyle - la risorsa di errore non è stata trovata - perché?
  • Emissione con Soundpool e Samsung Galaxy S
  • Ecco il mio codice.

    <intent-filter > <!-- Solution from @richardlegget on this question http://stackoverflow.com/questions/8148629/intent-filter-to-download-attachment-from-gmail-apps-on-android --> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/octet-stream" android:pathPattern=".*\\.myextension" /> </intent-filter> <intent-filter > <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" android:scheme="file" android:host="*" android:pathPattern=".*\\.myextension" /> </intent-filter> 

    La mia domanda

    Esiste una serie coperta di filtri intenti che registrano un'attività specifica con qualsiasi file contenente l'estensione di file desiderata da qualsiasi punto del dispositivo Android?

  • Recupera file in Android Studio?
  • Tastiera morbida sovrapposta con il field EditText
  • Android: Come get i dati / anr / traces.txt da Samsung Galaxy Tab?
  • Come utilizzare ADB per submit events di contatto a dispositivo utilizzando il command sendevent?
  • Come implementare lo stato di lettura dei messaggi come whatsapp blue tick tick?
  • Controllare se l'area è localizzata nell'ADF caricato
  • 4 Solutions collect form web for “Registra attività per aprire qualsiasi file con una certa estensione”

    Non so perché utilizzi filtri intenti separati quando puoi farlo usando un singolo tag.

      <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="*" android:pathPattern=".*\\.myextension" /> <data android:scheme="https" android:host="*" android:pathPattern=".*\\.myextension" /> <data android:scheme="content" android:host="*" android:pathPattern=".*\\.myextension" /> <data android:scheme="file" android:host="*" android:pathPattern=".*\\.myextension" /> </intent-filter> 

    Ci potrebbe essere un problema di autorizzazioni. IE Se l'attività è impostata per aprire in un'attività separata, allora non è ansible accedere ai file creati / posseduti da altre applicazioni. Devi impostare le bandierine di intenti in modo tale che si apra nella stessa applicazione.

    Prova più <data android:pathPattern/> come suggerisce questa risposta

    È necessario risolvere il path quando lo scheme è content , cioè quando ricevi un URI a un ContentProvider . Il sistema esaminerà il tipo di mime per la tua chiamata a ContentResolver.getType(Uri uri) prima che il filter dell'intento sia selezionato, per cui è necessario il codice riportto di seguito.

    Risolvi il path del file nel file recuperando un cursore dall'URI contenente lo schema dei contenuti e richiedendo la colonna _data:

     Cursor cursor = getContentResolver().query(URI, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); return cursor.getString(idx); } 

    E aggiungi questo filter d'intenti:

     <intent-filter > <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="content" /> <data android:mimeType="ourapp/ourfileextension" /> <data android:mimeType="application/zip" /> <data android:mimeType="application/octet-stream" /> </intent-filter> 
    • Può aprire qualsiasi tipo di file. Ma qui ho gestito i tipi di file utilizzati ripetutamente, senza disturbare il comportmento predefinito.
    • E lo snippet è come qui sotto …

      public void openAllFiles (Url file) lancia IOException {// Crea file URI file = url; Uri uri = Uri.fromFile (file);

       Intent intent = new Intent(Intent.ACTION_VIEW); // Check what kind of file you are trying to open, by comparing the url with extensions. // When the if condition is matched, plugin sets the correct intent (mime) type, // so Android knew what application to use to open the file if (url.toString().contains(".doc") || url.toString().contains(".docx")) { // Word document intent.setDataAndType(uri, "application/msword"); } else if(url.toString().contains(".pdf")) { // PDF file intent.setDataAndType(uri, "application/pdf"); } else if(url.toString().contains(".ppt") || url.toString().contains(".pptx")) { // Powerpoint file intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); } else if(url.toString().contains(".xls") || url.toString().contains(".xlsx")) { // Excel file intent.setDataAndType(uri, "application/vnd.ms-excel"); } else if(url.toString().contains(".zip") || url.toString().contains(".rar")) { // WAV audio file intent.setDataAndType(uri, "application/x-wav"); } else if(url.toString().contains(".rtf")) { // RTF file intent.setDataAndType(uri, "application/rtf"); } else if(url.toString().contains(".wav") || url.toString().contains(".mp3")) { // WAV audio file intent.setDataAndType(uri, "audio/x-wav"); } else if(url.toString().contains(".gif")) { // GIF file intent.setDataAndType(uri, "image/gif"); } else if(url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) { // JPG file intent.setDataAndType(uri, "image/jpeg"); } else if(url.toString().contains(".txt")) { // Text file intent.setDataAndType(uri, "text/plain"); } else if(url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) { // Video files intent.setDataAndType(uri, "video/*"); } else { //if you want you can also define the intent type for any other file //additionally use else clause below, to manage other unknown extensions //in this case, Android will show all applications installed on the device //so you can choose which application to use intent.setDataAndType(uri, "*/*"); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

      }

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.