2012-05-28 14 views
23

Mi aplicación envía archivos (todos los tipos de mime) a través de una conexión TCP y, por lo tanto, quería que mi aplicación apareciera en el menú Compartir de Android.Práctica recomendada: agregar su aplicación al menú Compartir de Android

que añaden los siguientes filtros intención de mi actividad en AndroidManifest.xml

<intent-filter ><!--intent filter for single file sharing--> 
    <action android:name="android.intent.action.SEND" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="*/*" /> 
</intent-filter> 
<intent-filter ><!--intent filter for sharing multiple files--> 
    <action android:name="android.intent.action.SEND_MULTIPLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="*/*" /> 
</intent-filter> 

Ahora he añadido esto a la Activity que va a ser lanzado al hacer clic en el Compartir Acción

Intent intent = getIntent(); 
if (Intent.ACTION_SEND.equals(intent.getAction())) 
{ 
Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); 
if (uri != null) { 
    fileset = new HashSet(); 
    fileset.add(getPathfromUri(uri)); 
    } 
} 
else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) 
{ 
ArrayList<Uri> uris= intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); 
if (uris != null) { 
     fileset = new HashSet(); 
     for(Uri uri : uris)       
      { 
      fileset.add(getPathfromUri(uri)); 
      } 
     } 
} 

utilizo este método para generar las rutas absolutas de los archivos que se van a compartir.

public String getPathfromUri(Uri uri) { 
if(uri.toString().startsWith("file://")) 
     return uri.getPath(); 
String[] projection = { MediaStore.Images.Media.DATA }; 
Cursor cursor = managedQuery(uri, projection, null, null, null); 
startManagingCursor(cursor); 
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
cursor.moveToFirst(); 
String path= cursor.getString(column_index); 
//cursor.close(); 
return path; 
} 

El método anterior recupera correctamente la ruta absoluta de imágenes/vídeos y otros files.Is Hay algo que has perdido o hay una mejor manera de hacer esto?

Además del menú Share, hay un menú Send Via en mi teléfono. screenshot

¿Hay alguna manera de incluir mi aplicación en esta lista?

+2

AFAIK, solo hay un menú "Compartir". Esa lista puede ser personalizada, ya que esperaría que Facebook, G +, Twitter aparezcan en esa lista, de lo contrario, si los tiene instalados. –

+0

Yo también creo que los que están en la lista son las aplicaciones predeterminadas que vienen con la ROM. Eso debe ser algo que Samsung ha agregado :) Gracias por aclarar – coderplus

+0

¿Has probado esto? intent.setType ("*/*"); – jzafrilla

Respuesta

0

Traté de resolver este problema y estoy bastante seguro de que la galería de Samsung utiliza alguna acción personalizada para compartir a través de ese menú. Teniendo en cuenta que todas las aplicaciones enumeradas están preinstaladas, es obvio que Samsung estuvo de acuerdo con todos los desarrolladores de aplicaciones mencionados para usar su acción de intención personalizada.

También he intentado contactar con Samsung y todavía no me han contestado.

0

que he descrito aquí cómo conseguir en el menú:

http://blog.blundellapps.com/add-your-app-to-the-android-menu/

Básicamente se trata de tener su tipo MIME /:

 <intent-filter> 
      <action android:name="android.intent.action.GET_CONTENT" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="*/*" /> 
     </intent-filter> 

Si lo hace, y que doesn' Aparecer, significa que están usando un menú de intención y es una lista de uso compartido personalizada para que no pueda abrirse paso a la fuerza.

+0

el enlace va a un sitio de phishing –

+0

fijo, era el dominio anterior – Blundell

2

, creo que estás compartiendo las imágenes desde fuera de la aplicación. Por favor, defina el minetipo en intentfiler. está funcionando bien en el lado mío.

<activity 
      android:name=".SharePhotoFromOutSide" 
      android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:mimeType="photo/*" /> 
      </intent-filter> 
     </activity> 
+0

Creo que su filtro es el mismo que el mío, excepto por el mimeType.Mine muestra el menú Compartir para todos los tipos de archivos. El menú en mi pregunta original es un menú personalizado de Samsung y no creo que haya una manera de entrar solo modificando el Manifiesto. ¿Existe mimeType 'photo/*'? Habría usado 'image/*' si solo estuviera tratando de compartir imágenes: http://en.wikipedia.org/wiki/Internet_media_type – coderplus

+0

*/* define el tipo de archivo, pero usted puede photo/* para compartir las fotos desde fuera de la aplicación. funciona bien al lado mío. –

Cuestiones relacionadas