2010-12-12 15 views
9

Ho fatto una domanda in precedenza su ciò che appare in IntentChooser quando invio un Intento con ACTION_SEND e il tipo MIME "image/png". Il problema è che alcuni telefoni sono dotati di un'app di messaggistica predefinita che non viene visualizzata nell'elenco, inclusa la mia (myTouch 4G) e un utente con cui parlo tramite e-mail (utilizzando un HTC EVO). Se scelgo l'opzione Invia o Condividi dall'app della galleria incorporata o da un'altra applicazione sulla stessa immagine che sto salvando e provando a inviare direttamente dalla mia app, Messaggi vengono visualizzati nell'elenco. Dalla mia app no. Altri telefoni non hanno questo problema, quindi è chiaramente una cosa specifica per la piattaforma. Ma ciò non significa che dovrei semplicemente ignorare il problema.Debugging Intents

Quindi, vado a risolvere il problema. Registro una delle attività nella mia app per ricevere lo stesso tipo di intento, quindi faccio clic su un punto di interruzione per analizzare l'oggetto Intent inviato dai due diversi modi di inviarlo.

Il problema è che l'intento che sto inviando e l'intento inviato da Gallery o AndroZip (dove i messaggi vengono visualizzati nel selettore) sembrano essere gli stessi. Entrambi hanno la stessa azione, stesse categorie, stesse bandiere, stesso tipo di mimo. Cos'altro posso controllare su Intent from Gallery o AndroZip per sapere se ci sono ulteriori informazioni che posso aggiungere al mio Intent per far apparire l'app di messaggistica predefinita nel selettore nel caso in cui non lo sia?

+3

Raccomando una zanzariera durante il debugging in tenda. –

risposta

8

Il problema è specifico per i telefoni HTC Sense, e deriva dal fatto che la loro galleria e Messaging app sono diversi per le azionari quelli.

In particolare l'intento inviato dalla Galleria alla messaggistica ha l'azione android.intent.action.SEND_MSG diversa da android.intent.action.SEND. L'app di messaggistica Sense non gestisce SEND, a differenza dell'app per la messaggistica di magazzino.

Quindi la domanda diventa: in che modo l'app Sense Gallery crea una finestra di selezione attività che combina sia SEND che SEND_MSG?

Ho effettuato alcune ricerche e sono arrivato in questo modo ... il codice seguente funziona, ma la voce "Messaggi" nella finestra di dialogo appare in alto anziché in ordine alfabetico come da Galleria. Senza dubbio un po 'di ricerca sulle intenzioni sarebbe corretto che, ma almeno questo funziona:

// Create a chooser for things that can ACTION_SEND images 
    Intent intent = new Intent(Intent.ACTION_SEND); 
    Uri data = Uri.parse("content://media/external/images/media/98"); 
    intent.putExtra(Intent.EXTRA_STREAM, data); 
    intent.setType("image/jpeg"); 
    Intent chooser = Intent.createChooser(intent, "Blah"); 

    // Add the stupid HTC-Sense-specific secondary intent 
    Intent htcIntent = new Intent("android.intent.action.SEND_MSG"); 
    htcIntent.putExtra(Intent.EXTRA_STREAM, data); 
    htcIntent.setType("image/jpeg"); 
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { htcIntent }); 

    // Show the chooser 
    startActivity(chooser); 
+0

Brillante! +1. Ho dovuto modificare il codice per farlo funzionare comunque. Vedi la mia risposta qui sotto. – user432209

+0

Non so come ho perso la seconda riga putExtra() ... è nel mio codice originale.Restaurato ora, evviva. –

0

Invece di eseguire il debug degli intent, perché non provare a confrontare il modo in cui si avvia il selettore con il modo in cui la galleria lo sta eseguendo. Dopo tutto è open source, quindi, invece di provare a indovinare il problema con il risultato, puoi eseguire il debug della causa.

https://android.googlesource.com/platform/packages/apps/Gallery3D

+0

Questa è l'app Galleria stock. Il problema sembra essere visualizzato solo sui telefoni Sense che dispongono di diverse app Gallery e di messaggistica. L'ho ripubblicato su un desiderio HD. –

1

Prima di tutto, uno a Reuben, lui è il genio, non io. Ma ho dovuto modificare un po 'il suo codice per farlo funzionare. Fondamentalmente ho dovuto inserire EXtra() su htcIntent o l'immagine non si è mai bloccata nell'Intent.

Testato e convalidato su un Droid X e HTC Incredible (che ha avuto lo stesso problema fino ad ora grazie a Reuben).

Uri uri = Uri.fromFile(new File(mFile)); 
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
intent.setType("image/png"); 

Intent htcIntent = new Intent("android.intent.action.SEND_MSG"); 
htcIntent.setType("image/png"); 
htcIntent.putExtra(Intent.EXTRA_STREAM, uri); 

Intent chooser = Intent.createChooser(intent, "Send Method"); 
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { htcIntent }); 
startActivity(chooser); 

Edit: mi rendo conto che sto mettendo l'immagine su due Intenti ora, ma non riuscivo a farlo funzionare in altro modo.

+0

Aggiungere i dati a entrambi gli intent è davvero la cosa giusta da fare. Ancora sconcertante come una linea cruciale sia stata tagliata dalla copia della pasta nel mio esempio. –