it-swarm.com.de

Teilen Sie Text auf Facebook von Android App über ACTION_SEND

Ich habe eine Android App und sie unterstützt das Senden von Text über andere Apps. Sie verwendet daher die ACTION_SEND-Absicht und das EXTRA_TEXT-Feld. Die Auswahl zeigt mir alle Apps an, die mit einer solchen Absicht umgehen können Twitter, EMail, ... und Facebook: Wenn ich Facebook auswähle, wird der Browser geöffnet und die folgende Seite aufgerufen:

http://m.facebook.com/sharer.php?u=mytext

Es zeigt meinen Text und die Schaltfläche "Senden". Aber wenn ich den Submit-Button drücke, passiert nichts. Die Seite wird gerade wieder geladen. Ich denke, vielleicht ist es nur möglich, URLs über die Facebook-App zu senden. Könnte das sein?

Hat es jemand geschafft, Text über ACTION_SEND über die Facebook Android App zu senden?

91
Goddchen

BEARBEITET: mit dem neuen Release der offiziellen Facebook-App für Android (14. Juli 2011) ES FUNKTIONIERT !!!

ALT: Die obigen Beispiele funktionieren nicht, wenn der Benutzer die Facebook-App zum Teilen auswählt. Sie funktionieren jedoch, wenn der Benutzer die Seesmic-App zum Posten auf Facebook auswählt. Ich denke, Seesmic hat eine bessere Implementierung der Facebook-API als Facebook!

11
Giulio Prisco

Damit die Freigabe mit der Facebook-App funktioniert, muss nur mindestens ein Link vorhanden sein:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

Dadurch wird das richtige Freigabefenster angezeigt, aber wenn Sie auf Freigeben klicken, passiert nichts (ich habe es auch mit der offiziellen Twitter-App versucht, es funktioniert nicht).

Die einzige Möglichkeit, die Facebook-App-Freigabe zu ermöglichen, besteht darin, nur einen Link ohne Text freizugeben:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

Es wird das folgende Fenster angezeigt und die Share-Schaltfläche funktioniert:

facebook share

Anscheinend werden automatisch ein Bild und ein Text aus dem Link verwendet, um die Freigabe zu füllen.

Wenn Sie nur Text teilen möchten, müssen Sie die Facebook-API verwenden: https://github.com/facebook/facebook-Android-sdk

51
ol_v_er

06/2013:

  • Dies ist ein Fehler von Facebook, nicht Ihr Code
  • Facebook wird diesen Fehler NICHT beheben , sie sagen , es sei "beabsichtigt" , dass sie das Android Anteilsystem gebrochen haben: https://developers.facebook.com/bugs/33261962681642
  • verwenden Sie das SDK oder geben Sie nur die URL frei.
  • Tipps: Sie können den Titel der Webseite als Text für den Beitrag verwenden.
45
Loda

Zuerst müssen Sie die Option "Absicht zur Handlerfreigabe" abfragen. Verwenden Sie dann den Paketnamen, um Intent zu filtern. Dann haben wir nur eine Intent-Option für die Handlerfreigabe!

Über Facebook teilen

Intent shareIntent = new Intent(Android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ((app.activityInfo.name).contains("facebook")) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

Bonus - Über Twitter teilen

Intent shareIntent = new Intent(Android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ("com.Twitter.Android.PostActivity".equals(app.activityInfo.name)) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

Und wenn Sie wissen möchten, wie Sie über eine andere Freigabeanwendung freigeben können, finden Sie diese dort Tép Blog - Erweiterte Freigabe über Android

28
khaintt

Ich habe ein Problem, aber es wird davon ausgegangen, dass Sie die Kontrolle über die Seite haben, die Sie freigeben ...

Wenn Sie Ihren EXTRA_TEXT so formatieren ...

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

... dann sollte Ihr Text auf Nicht-Facebook-Apps ungefähr so ​​aussehen:

http://www.example.com/myPicPage.html?extraText=

Hallo!
Dies ist ein ordentliches Bild!

Wenn Sie jetzt Ihre Website so aktualisieren, dass Anforderungen mit dem Abfrageparameter extraText den Inhalt von extraText in den Metadaten der Seite zurückgeben.

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">

Wenn Facebook diese URL dann verlässt, um den Dialog zu generieren, werden die Titel-Metadaten gelesen und in Ihren Freigabe-Dialog eingebettet.

Mir ist klar, dass dies eine hübsche Lösung ist, also nimm ein Körnchen Salz mit ...

11
Joseph Lee

Es scheint, dass die Facebook-App diese Absicht falsch handhabt. Der zuverlässigste Weg scheint die Verwendung der Facebook-API für Android zu sein.

Das SDK finden Sie unter folgendem Link: http://github.com/facebook/facebook-Android-sdk

Unter 'Nutzung' gibt es folgendes:

Zeigt einen Facebook-Dialog an.

Das SDK unterstützt mehrere WebView-HTML-Dialogfelder für Benutzerinteraktionen, z. B. das Erstellen eines Pinnwandposts. Damit soll eine schnelle Facebook-Funktionalität bereitgestellt werden, ohne dass eine native Android UI implementiert und Daten direkt über die APIs an Facebook übergeben werden müssen.

Dies scheint die beste Möglichkeit zu sein: Zeigen Sie ein Dialogfeld an, das an die Wand gesendet wird. Das einzige Problem ist, dass sie sich möglicherweise zuerst anmelden müssen

2
HXCaine
Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(Android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(Android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(Android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult
1
Vinod Joshi
ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}
1
Ram Bhawan

wenn Sie Text anzeigen möchten, setzen Sie # am Anfang der Nachricht, die Sie möchten, und teilen Sie ihn als Hashtag

0
MFQ

Es scheint, dass es sich um einen Fehler in der Facebook-App handelt, der im April 2011 gemeldet wurde und noch von den Android Facebook-Entwicklern behoben werden muss.

Die einzige Lösung für den Moment ist, das SDK zu verwenden.

0
Joseph Woodward