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?
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!
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:
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
06/2013:
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
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 ...
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
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
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);
}
wenn Sie Text anzeigen möchten, setzen Sie # am Anfang der Nachricht, die Sie möchten, und teilen Sie ihn als Hashtag
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.