У меня есть приложение для Android, которое поддерживает отправку текста через другие приложения. Поэтому он использует ACTION_SEND
намерение и EXTRA_TEXT
поле. Выборщик представляет мне все приложения, которые могут справиться с таким намерением. Это Twitter, электронная почта ... и Facebook. Но когда я выбираю Facebook, он открывает браузер и переходит на следующую страницу:
http://m.facebook.com/sharer.php?u=mytext
Он показывает мой текст и кнопку отправки. Но когда я нажимаю кнопку отправки, ничего не происходит. Страница снова загружается. Я думаю, что возможно отправлять URL-адреса только через приложение Facebook. Могло ли это быть?
Кому-нибудь удалось отправить текст через ACTION_SEND
приложение Facebook для Android?
android
facebook
android-intent
android-sharing
Goddchen
источник
источник
Ответы:
ИЗМЕНИТЬ: с новым выпуском официального приложения Facebook для Android (14 июля 2011 г.) ЭТО РАБОТАЕТ !!!
СТАРОЕ: приведенные выше примеры не работают, если пользователь выбирает приложение Facebook для публикации, но они работают, если пользователь выбирает приложение Seesmic для публикации в Facebook. Полагаю, у Seesmic есть лучшая реализация API Facebook, чем у Facebook!
источник
Чтобы Поделиться работала с приложением facebook, вам нужно предоставить хотя бы одну ссылку:
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"));
Это покажет правильное окно совместного использования, но когда вы нажмете на «Поделиться», ничего не произойдет (я также пробовал использовать официальное приложение Twitter, оно не работает).
Единственный способ, который я нашел, чтобы заставить работать приложение Facebook, - это поделиться только ссылкой без текста:
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"));
Откроется следующее окно, и кнопка «Поделиться» будет работать:
Очевидно, он автоматически берет изображение и текст из ссылки, чтобы заполнить общий ресурс.
Если вы хотите поделиться только текстом, вам нужно будет использовать API facebook: https://github.com/facebook/facebook-android-sdk
источник
Facebook
приложение будет правильно извлекать ссылку из строки видаWonderful search engine http://www.google.fr/
. Обратите внимание, что я сказал потянуть ссылку , она все равно ничего не сделает с текстом. ТакжеTwitter
работает как с текстом, так и со ссылкой.06/2013:
источник
Сначала вам нужно запросить Intent для опции совместного использования обработчика. Затем используйте имя пакета для фильтрации Intent, тогда у нас будет только один вариант Intent для совместного использования обработчика!
Поделиться через Facebook
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; } }
Бонус - Поделиться через Twitter
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; } }
А если вы хотите узнать, как поделиться через другое приложение для обмена, найдите его там Tép Blog - Advance share через Android
источник
Итак, у меня есть обходной путь, но он предполагает, что вы контролируете страницу, которой делитесь ...
Если вы отформатируете свой EXTRA_TEXT вот так ...
String myText = "Hey!\nThis is a neat pic!"; String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;
... тогда в приложениях, не относящихся к Facebook, ваш текст должен выглядеть примерно так:
Теперь, если вы обновите свой веб-сайт так, чтобы запросы с параметром запроса extraText возвращали содержимое extraText в метаданных страницы.
<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ --> <meta name="title" content="Hey! this is a neat pic!">
Затем, когда Facebook экранирует этот URL-адрес для создания диалогового окна, он считывает метаданные заголовка и вставляет их в диалоговое окно общего доступа.
Я понимаю, что это довольно неприятное решение, так что относитесь к нему с недоверием ...
источник
Похоже, что приложение Facebook неправильно обрабатывает это намерение. Самый надежный способ - использовать API Facebook для Android.
SDK находится по этой ссылке: http://github.com/facebook/facebook-android-sdk
В разделе «Использование» имеется следующее:
Кажется, это лучший способ сделать это - отобразить диалоговое окно, которое будет размещено на стене. Единственная проблема в том, что им, возможно, придется сначала войти в систему
источник
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); }
источник
Похоже, что это ошибка в приложении Facebook, о которой сообщили в апреле 2011 года, и разработчики Android для Facebook еще не исправили ее.
Единственный обходной путь на данный момент - использовать их SDK.
источник
если вы хотите показать текст, поставьте # в начале сообщения, которое вы хотите, он поделится им как хэштег
источник