2012-06-11 13 views
5

Sto cercando di associare la mia app con l'estensione. Ho letto documentation e somequestions sul problema. Ma i principali file explorer (come es file explorer, astro, file manager di Rhythm) non possono aprire i miei file.filtro di Intenti per file comune esploratori

mio manifest di file:

<activity android:name="com.comapping.android.map.MapActivity" android:configChanges="orientation|keyboardHidden"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="file" android:host="*" android:pathPattern=".*\\.comap" android:mimeType="*/*" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="content" android:host="*" android:pathPattern=".*\\.comap" android:mimeType="*/*" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    <meta-data android:name="android.app.searchable" 
     android:resource="@xml/searchable" /> 
</activity>

E Se provo ad aprire il file dalla mia applicazione utilizzando il codice seguente tutto funziona bene (selettore non mostrato):

String extension = ""; 
int dotIndex = downloadedFile.lastIndexOf('.'); 
if (dotIndex != -1) { 
    extension = downloadedFile.substring(dotIndex + 1, downloadedFile.length()); 
} 

// create an intent 
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
Uri data = Uri.fromFile(new File(downloadedFile)); 
String type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); 
if (type == null || type.length() == 0) { 
    // if there is no acceptable mime type 
    type = "application/octet-stream"; 
} 
intent.setDataAndType(data, type); 

// get the list of the activities which can open the file 
List resolvers = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
if (resolvers.isEmpty()) { 
    (new AlertDialog.Builder(context) 
      .setMessage(R.string.AttachmentUnknownFileType) 
      .setNeutralButton(R.string.NeutralButtonText, null) 
      .create()).show(); 
} else { 
    context.startActivity(intent); 
}

Se provo ad aprirlo utilizzando il gestore di file OpenIntents tutto è normale - ha mostrato un lungo chooser con molte app e la mia app nell'elenco.

Ma se provo ad aprirlo con Esplora file ES o il file explorer Ritmo - hanno mostrato la loro selezionatore personalizzato (aperto come testo/immagine/video/audio). È cattivo.

E se provo ad aprirlo con Astro - apre file manager di OpenIntent. È anche male.

C'è qualche soluzione del problema? Chi ha torto in un simile comportamento?

Grazie per qualsiasi aiuto.

risposta

0

Una parte del problema è tutti i diversi modi persone avvolgere un intento condiviso per, diciamo, un file che si risolve a text/plain in identificatore mimo Android.

Il mio approccio è stato quello di scoprire quali tipi di mime i file che voglio siano. Quindi ho impostato i miei filtri manifest su quei tipi. Io uso due filtri. Il primo filtra solo i mimi che voglio. Il secondo è una copia dei primi schemi plus.

Poi ho testare con l'invio di azioni da applicazioni come avete fatto. Quando uno non funziona, io uso un brindisi per vedere cosa sto ottenendo per un FLUSSO e quindi modificarlo per adattarlo. Per esempio, se ho un flusso OpenIntent, devo togliere

content://org.openintents.filemanager 

che mi lascia con il percorso. Per lo più, non mi resta che rimuovere:

file:// 

ma è sempre qualcosa perché tutto il contenuto/Uri/schema di intenti è un whatsit free-for-all cluster.

LATER. Mi sono appena imbattuto in questo:

Intent intent = getIntent();     
String name = intent.getData().getPath(); 

Forse quello farà per voi. Lo proverò presto anch'io.

Problemi correlati