Android Intent per l'applicazione Twitter

È ansible mostrare un elenco di applicazioni (con intent.createChooser ) che mostrano solo le mie applicazioni twitter sul mio telefono (quindi htc peep (htc hero) o twitdroid). Ho provato con intent.settype("application/twitter") ma non trova alcuna applicazione per il twitter e mostra solo le mie applicazioni di posta.

Grazie,

  • Come utilizzare Eclipse per creare apk firmato?
  • Passaggio di dati di tipo non primitivo tra attività in android
  • Errore di exception di Android SupportMapFragment
  • Android distriggers / distriggers il telefono
  • Come mantenere il javadoc visibile dopo l'obfuscazione
  • Come rimuovere il titolo quando lancia l'applicazione android?
  • Wouter

  • Quanto bene l'emulatore di Android Phone riflette le performance?
  • Come controllare la connettività internet in android?
  • Perché questo collegamento profondo (applink) generato da facebook non funziona?
  • Crashlytics con errore di costruzione di Android Studio
  • come impedire lo sanguinamento di clic su Android utilizzando Jquery Mobile?
  • Come spostare l'image catturata con la camera del telefono da un'attività a una visualizzazione di immagini in un'altra attività?
  • 9 Solutions collect form web for “Android Intent per l'applicazione Twitter”

    E 'del tutto ansible che i tuoi utenti continueranno, sempre e per sempre, solo a submit messaggi a Twitter.

    Penserei che sia più probabile che i tuoi utenti vogliono submit informazioni alle persone, e Twitter è una possibilità. Ma potrebbero anche voler submit un messaggio di text o un'email, ecc.

    In questo caso, utilizzare ACTION_SEND , come descritto qui . Twidroid, in particolare, support ACTION_SEND , per cui apparirà nell'elenco dei meccanismi di consegna disponibili.

    Sto postando questo perché non ho ancora visto una soluzione che fa esattamente quello che voglio.

    Questo innanzitutto lancia l'applicazione ufficiale di Twitter , o se non è installata, visualizza una window di dialogo "Completa azione tramite …" ( come questo ) o lancia direttamente un browser web.

    Per l'elenco di parametri diversi nell'indirizzo twitter.com, vedere i pulsanti del button Tweet . Ricorda che l' URL codifica i valori dei parametri. (Questo codice è specifico per tweeting un URL, se non lo desideri, basta lasciare il parametro url .)

     // Create intent using ACTION_VIEW and a normal Twitter url: String tweetUrl = String.format("https://twitter.com/intent/tweet?text=%s&url=%s", urlEncode("Tweet text"), urlEncode("https://www.google.fi/")); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tweetUrl)); // Narrow down to official Twitter app, if available: List<ResolveInfo> matches = getPackageManager().queryIntentActivities(intent, 0); for (ResolveInfo info : matches) { if (info.activityInfo.packageName.toLowerCase().startsWith("com.twitter")) { intent.setPackage(info.activityInfo.packageName); } } startActivity(intent); 

    (La codifica dell'URL è più pulita se si ha una piccola utilità come questa da qualche parte, ad esempio "StringUtils".)

     public static String urlEncode(String s) { try { return URLEncoder.encode(s, "UTF-8"); } catch (UnsupportedEncodingException e) { Log.wtf(TAG, "UTF-8 should always be supported", e); throw new RuntimeException("URLEncoder.encode() failed for " + s); } } 

    Ad esempio, sul mio dispositivo Nexus 7, questo apre direttamente l' applicazione ufficiale di Twitter :

    immettere qui la descrizione dell'immagine

    Se l'applicazione ufficiale di Twitter non è installata e l'utente seleziona Chrome oppure si apre automaticamente (come l'unica applicazione che può gestire l'intenzione):

    immettere qui la descrizione dell'immagine

    Le soluzioni pubblicate prima, consentono di submit direttamente la tua prima applicazione per twitter. Per visualizzare un elenco di applicazioni twitters (se esistono più di uno), è ansible personalizzare il tuo Intent.createChooser per mostrare solo gli Itents desiderati.

    Il trucco è aggiungere EXTRA_INITIAL_INTENTS all'elenco predefinito generato dalla creaChoose e rimuovere gli altri intenti dall'elenco.

    Guarda questo esempio where creo un chooser che mostra solo le mie applicazioni di posta elettronica. Nel mio caso vengono visualizzate tre posta: Gmail, YahooMail e la posta predefinita.

     private void share(String nameApp, String imagePath) { List<Intent> targetedShareIntents = new ArrayList<Intent>(); Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/jpeg"); List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND); targetedShare.setType("image/jpeg"); // put here your mime type if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || info.activityInfo.name.toLowerCase().contains(nameApp)) { targetedShare.putExtra(Intent.EXTRA_TEXT, "My body of post/email"); targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath)) ); targetedShare.setPackage(info.activityInfo.packageName); targetedShareIntents.add(targetedShare); } } Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); startActivity(chooserIntent); } } 

    Puoi eseguire così: share ("twi", "/sdcard/dcim/Camera/photo.jpg");

    Questo è stato basato sul post: filter personalizzato del calibro di intenti basato sul nome del pacchetto Android installato

    Questa domanda è un po 'più vecchia, ma da quando ho appena incontrato un problema simile, potrebbe anche essere di interesse per gli altri. Innanzitutto, come accennato da Pietro, crea l'intenzione:

     Intent tweetIntent = new Intent(Intent.ACTION_SEND); tweetIntent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore"); tweetIntent.setType("application/twitter"); 

    "application / twitter" è infatti un tipo di contenuto noto, vedere qui . Ora, quando si tenta di avviare un'attività con questa intenzione, mostrerà tutti i tipi di applicazioni che non sono veramente client di Twitter, ma desiderano un pezzo dell'azione. Come già detto in un paio di "perché vuoi anche farlo?" tipo di risposte, alcuni utenti potrebbero trovare utile. D'altra parte, se ho un button nella mia app che dice "Tweet this!", L'utente si aspetterebbe molto da fare questo per sollevare un client Twitter.

    Ciò significa che, invece di lanciare un'attività, dobbiamo filtrare quelle che sono appropriate:

     PackageManager pm = getPackageManager(); List<ResolveInfo> lract = pm.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY); boolean resolved = false; for(ResolveInfo ri: lract) { if(ri.activityInfo.name.endsWith(".SendTweet")) { tweetIntent.setClassName(ri.activityInfo.packageName, ri.activityInfo.name); resolved = true; break; } } 

    Avrebbe bisogno di sperimentare un po 'con i diversi provider, ma se il nome finisce in ".SendTweet" sei abbastanza sicuro (questo è il nome di attività in Twidroyd). È anche ansible controllare il debugger per i nomi dei pacchetti che si desidera utilizzare e adattare correttamente il confronto delle stringhe (vale a dire Twidroyd utilizza "com.twidroid. *").

    In questo semplice esempio abbiamo appena selezionato la prima attività di corrispondenza che troviamo. Questo port direttamente il client Twitter, senza che l'utente dovrà effettuare scelte. Se non ci sono client Twitter appropriati, ritorneremo al selezionatore di attività standard:

     startActivity(resolved ? tweetIntent : Intent.createChooser(tweetIntent, "Choose one")); 

    È ansible espandere il codice e tenere conto del caso che esiste più di un client Twitter, quando si desidera creare la propria window di dialogo di scelta tra tutti i nomi di attività che si trovano.

    Queste risposte sono tutte troppo complesse.

    Se fai semplicemente un intento normale che fa a Twitter.com, otterrai questa schermata:

    immettere qui la descrizione dell'immagine

    che ti dà l'opzione di andare al sito web se non hai installato apps Twitter.

     String url = "https://twitter.com/intent/tweet?source=webclient&text=TWEET+THIS!"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 

    O

    • Intent.ACTION_SEND un'attività con un intento con azione Intent.ACTION_SEND e il tipo di text/plain MIME. Avrai tutte le applicazioni che supportno l'invio di text. Questo dovrebbe essere qualsiasi client twitter, così come Gmail, dropbox, ecc.
    • Oppure, cerchi di cercare l'azione specifica di each client a cui sei a conoscenza, come "com.twitter.android.PostActivity" per il client ufficiale . Ciò punterà a questo cliente, e non è probabile che sia un elenco completo.
    • Oppure, cominci con il secondo punto e rientri nel primo …

    No. Il tipo di intento è qualcosa di simile image/png o application/pdf , vale a dire un tipo di file, e con createChooser chiedete in pratica quali applicazioni possono aprire questo tipo di file.

    Ora, non esiste un file application/twitter che può essere aperto, in modo che non funziona. Non sono a conoscenza di alcun altro modo in cui sia ansible get quello che vuoi.

    Da http://twidroid.com/plugins/

    Intento di ACTION_SEND di Twidroid

     Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is a sample message via Public Intent"); sendIntent.setType("application/twitter"); startActivity(Intent.createChooser(sendIntent, null)); 

    Ho usato la risposta "billynomates" ed è stato in grado di utilizzare hashtags utilizzando la function "URLEncoder.encode (," UTF-8 ")". I tag hash si sono presentati benissimo.

     String originalMessage = "some message #MESSAGE"; String originalMessageEscaped = null; try { originalMessageEscaped = String.format( "https://twitter.com/intent/tweet?source=webclient&text=%s", URLEncoder.encode(originalMessage, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if(originalMessageEscaped != null) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(originalMessageEscaped)); startActivity(i); } else { // Some Error } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.