Mam aplikację na Androida i obsługuje ona wysyłanie tekstu za pośrednictwem innych aplikacji. Dlatego używa ACTION_SEND
intencji i EXTRA_TEXT
pola. Wybieracz przedstawia mi wszystkie aplikacje, które mogą obsłużyć taki zamiar. Są to Twitter, e-mail, ... i Facebook. Ale kiedy wybieram Facebooka, otwiera przeglądarkę i przechodzi do następującej strony:
http://m.facebook.com/sharer.php?u=mytext
Pokazuje mój tekst i przycisk przesyłania. Ale kiedy naciskam przycisk przesyłania, nic się nie dzieje. Strona po prostu wczytuje się ponownie. Myślę, że możliwe jest wysyłanie adresów URL tylko za pośrednictwem aplikacji Facebook. Czy to możliwe?
Czy komuś udało się wysłać SMS-a ACTION_SEND
przez aplikację Facebook na Androida?
android
facebook
android-intent
android-sharing
Goddchen
źródło
źródło
Odpowiedzi:
EDITED: w nowej wersji oficjalnej aplikacji Facebook na Androida (14 lipca 2011) TO DZIAŁA !!!
STARY: Powyższe przykłady nie działają, jeśli użytkownik wybierze aplikację Facebook do udostępniania, ale działają, jeśli użytkownik wybierze aplikację Seesmic do publikowania na Facebooku. Wydaje mi się, że Seesmic ma lepszą implementację API Facebooka niż Facebook!
źródło
Aby udostępnianie działało z aplikacją Facebook, wystarczy podać co najmniej jeden link:
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"));
Spowoduje to wyświetlenie prawidłowego okna udostępniania, ale po kliknięciu udostępnij nic się nie dzieje (próbowałem również z oficjalną aplikacją Twittera, nie działa).
Jedynym sposobem, w jaki udało mi się udostępnić aplikację na Facebooku, jest udostępnienie tylko linku bez tekstu:
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"));
Pokaże się następujące okno i przycisk Udostępnij będzie działał:
Najwyraźniej automatycznie pobiera obraz i tekst z linku, aby wypełnić udział.
Jeśli chcesz udostępniać tylko tekst, będziesz musiał skorzystać z interfejsu Facebooka: https://github.com/facebook/facebook-android-sdk
źródło
Facebook
aplikacja będzie poprawnie pobierać link z ciągu, takiego jakWonderful search engine http://www.google.fr/
. Zwróć uwagę, że powiedziałem, aby wyciągnąć link , nadal nic nie zrobi z tekstem. Ponadto,Twitter
współpracuje zarówno z tekstu i link.06/2013:
źródło
Najpierw potrzebujesz opcji udostępniania zapytania Intent to handler. Następnie użyj nazwy pakietu do przefiltrowania intencji, wtedy będziemy mieć tylko jedną opcję zamiaru, która ma opcję udostępniania obsługi!
Udostępnij na Facebooku
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 - Udostępnij na Twitterze
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; } }
A jeśli chcesz dowiedzieć się, jak udostępniać za pomocą innej aplikacji do udostępniania, znajdź ją tam Tép Blog - Zaawansowane udostępnianie za pośrednictwem systemu Android
źródło
Mam więc obejście, ale zakłada się, że masz kontrolę nad udostępnianą stroną ...
Jeśli sformatujesz EXTRA_TEXT w ten sposób ...
String myText = "Hey!\nThis is a neat pic!"; String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;
... wtedy w aplikacjach innych niż Facebook twój tekst powinien wyglądać mniej więcej tak:
Teraz, jeśli zaktualizujesz swoją witrynę w taki sposób, że żądania z parametrem zapytania extraText zwracają zawartość extraText w metadanych strony.
<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ --> <meta name="title" content="Hey! this is a neat pic!">
Następnie, gdy Facebook ucieka z tego adresu URL, aby wygenerować okno dialogowe, odczyta metadane tytułu i osadzi je w oknie udostępniania.
Zdaję sobie sprawę, że to niezłe rozwiązanie, więc weź z przymrużeniem oka ...
źródło
Wygląda na to, że aplikacja Facebook nieprawidłowo obsługuje ten cel. Wydaje się, że najbardziej niezawodnym sposobem jest użycie Facebook API dla Androida.
Pakiet SDK znajduje się pod tym linkiem: http://github.com/facebook/facebook-android-sdk
W sekcji „użycie” jest to:
Wydaje się, że to najlepszy sposób na zrobienie tego - wyświetl okno dialogowe, które zostanie opublikowane na ścianie. Jedynym problemem jest to, że być może będą musieli najpierw się zalogować
źródło
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
źródło
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); }
źródło
Wygląda na to, że jest to błąd w aplikacji Facebook, który został zgłoszony w kwietniu 2011 r. I wciąż nie został naprawiony przez programistów Facebooka na Androida.
W tej chwili jedynym rozwiązaniem jest użycie ich zestawu SDK.
źródło
jeśli chcesz pokazać tekst wstawiony # na początku wiadomości, którą chcesz, udostępni ją jako hashtag
źródło