Java >> Programma Java >  >> Java

Android:come faccio a rilevare se l'utente ha scelto di condividere su Facebook o Twitter utilizzando l'intento?

Ho creato un'applicazione che condivide su Facebook, Twitter ecc. Ma voglio eseguire funzioni diverse dipende da chi condivide l'utente , ad esempio, se l'utente sta condividendo su Facebook, fai una cosa ma se l'utente condivide su Twitter, fai un'altra.

Come faccio?

Il mio codice finora è di seguito:

private void ShareSub() {
    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("text/plain");
    i.putExtra(
            Intent.EXTRA_TEXT,
            "You've just shared "
                    + "Awesome");
    startActivity(i);
}

Ulteriore spiegazione del codice sopra:

Quando l'utente preme il pulsante "menu_item_share ” nella barra delle azioni, viene attivata la funzione sopra. Questa funzione fa quindi apparire una casella come l'immagine sottostante, che consente all'utente di selezionare un'opzione particolare, ad es. Facebook o Twitter. Il Intent.EXTRA_TEXT viene quindi condiviso con quella particolare app.

Quello che voglio è che quando l'utente fa clic, ad esempio su Facebook, viene chiamata una funzione particolare, ad es. Condivisione tramite la loro API (di Facebook) ecc.

Non sto usando ShareActionProvider come di seguito:

   <item
        android:id="@+id/your_share_item"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:showAsAction="ifRoom"
        android:title="@string/share"/>

Invece, ho creato un semplice pulsante che chiama la funzione ShareSub :

<item
    android:id="@+id/menu_item_share"
    android:icon="@android:drawable/ic_menu_share"
    android:showAsAction="ifRoom"
    android:title="Share"/>

Il motivo per cui ho scelto di farlo in questo modo è che non voglio che condiviso di recente a pulsante per apparire, come nell'immagine qui sotto. Questo mi sta causando problemi quando tento di utilizzare il codice suggerito di seguito perché non ho utilizzato ShareActionProvider .

Risposta

Non puoi scoprire direttamente quale app è stata scelta, ma puoi visualizzare la tua finestra di dialogo Scelta Risorse.

Invece di chiamare startActivity(i) , ottieni un elenco di tutte le attività (facebook, twitter ecc.) registrate per gestire le tue intenzioni utilizzando queryIntentActivities().

List<ResolveInfo> activities = getPackageManager().queryIntentActivities (i, 0);

Ogni ResolveInfo è un'app in grado di gestire le tue intenzioni. Ora puoi mostrare un AlertDialog contenente un elenco di etichette o icone. Quando l'utente seleziona un'etichetta dall'elenco, puoi gestire le operazioni da eseguire in base all'app nel gestore dei clic per la finestra di dialogo.

MODIFICA :Ecco un esempio funzionante completo

private void ShareSub() {
    final Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("text/plain");
    i.putExtra(Intent.EXTRA_TEXT,"text");

    final List<ResolveInfo> activities = getPackageManager().queryIntentActivities (i, 0);

    List<String> appNames = new ArrayList<String>();
    for (ResolveInfo info : activities) {
        appNames.add(info.loadLabel(getPackageManager()).toString());
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Complete Action using...");
    builder.setItems(appNames.toArray(new CharSequence[appNames.size()]), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            ResolveInfo info = activities.get(item);
            if (info.activityInfo.packageName.equals("com.facebook.katana")) {
                // Facebook was chosen
            } else if (info.activityInfo.packageName.equals("com.twitter.android")) {
                // Twitter was chosen
            }

            // start the selected activity
            i.setPackage(info.activityInfo.packageName);
            startActivity(i);
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}

Etichetta Java