Приложение Android Intent для Twitter

Можно ли отобразить список приложений (with intent.createChooser ), которые отображают только мои приложения на моем телефоне (так что htc peep (htc hero) или twitdroid). Я пробовал его с intent.settype("application/twitter") но он не находит никаких приложений для твиттера и только показывает мои почтовые приложения.

Спасибо,

Wouter

    Вполне возможно, что ваши пользователи будут только когда-либо, сейчас и навсегда, только хотят публиковать в Twitter.

    Я бы подумал, что более вероятно, что ваши пользователи хотят отправлять информацию людям, а Twitter – это одна из возможностей. Но они также могут отправить текстовое сообщение или электронное письмо и т. Д.

    В этом случае используйте ACTION_SEND , как описано здесь . Twidroid, в частности, поддерживает ACTION_SEND , поэтому он появится в списке доступных механизмов доставки.

    Я публикую это, потому что я еще не видел решения, которое делает именно то, что я хочу.

    Это в первую очередь запускает официальное приложение Twitter , или если оно не установлено, либо открывает диалоговое окно «Полное действие с использованием …» ( например, это ), либо непосредственно запускает веб-браузер.

    Список различных параметров URL-адреса twitter.com см. В документах Tweet Button . Не забудьте URL закодировать значения параметров. (Этот код специально предназначен для чирификации URL-адреса, если вы этого не хотите, просто оставьте параметр url .)

     // Create intent using ACTION_VIEW and a normal Twitter url: String tweetUrl = String.format("https://twitter.com/intent/tweet?text=%s&url=%s", urlEncode("Tweet text"), urlEncode("https://www.google.fi/")); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tweetUrl)); // Narrow down to official Twitter app, if available: List matches = getPackageManager().queryIntentActivities(intent, 0); for (ResolveInfo info : matches) { if (info.activityInfo.packageName.toLowerCase().startsWith("com.twitter")) { intent.setPackage(info.activityInfo.packageName); } } startActivity(intent); 

    (URL-кодирование является более чистым, если у вас такая небольшая утилита, например, «StringUtils».)

     public static String urlEncode(String s) { try { return URLEncoder.encode(s, "UTF-8"); } catch (UnsupportedEncodingException e) { Log.wtf(TAG, "UTF-8 should always be supported", e); throw new RuntimeException("URLEncoder.encode() failed for " + s); } } 

    Например, на моем устройстве Nexus 7 это напрямую открывает официальное приложение Twitter :

    введите описание изображения здесь

    Если официальное приложение Twitter не установлено, и пользователь либо выбирает Chrome, либо автоматически открывается (как единственное приложение, которое может обрабатывать намерение):

    введите описание изображения здесь

    Решения, опубликованные ранее, позволяют публиковать сообщения непосредственно в вашем первом приложении Twitter. Чтобы показать список приложений twitters (если их больше одного), вы можете настроить свой Intent.createChooser для отображения только тех иттенов, которые вы хотите.

    Трюк добавляет EXTRA_INITIAL_INTENTS в список по умолчанию, сгенерированный из createChoose, и удаляет другие намерения из списка.

    Посмотрите на этот образец, где я создаю выбор, который показывает только мои приложения для электронной почты. В моем случае появляются три письма: Gmail, YahooMail и Mail по умолчанию.

     private void share(String nameApp, String imagePath) { List targetedShareIntents = new ArrayList(); Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/jpeg"); List resInfo = getPackageManager().queryIntentActivities(share, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND); targetedShare.setType("image/jpeg"); // put here your mime type if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || info.activityInfo.name.toLowerCase().contains(nameApp)) { targetedShare.putExtra(Intent.EXTRA_TEXT, "My body of post/email"); targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath)) ); targetedShare.setPackage(info.activityInfo.packageName); targetedShareIntents.add(targetedShare); } } Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); startActivity(chooserIntent); } } 

    Вы можете запускать так: share (“twi”, “/sdcard/dcim/Camera/photo.jpg”);

    Это было основано на сообщении: Пользовательская фильтрация выбора намерений на основе установленного имени пакета Android

    Этот вопрос немного старше, но поскольку я только что столкнулся с подобной проблемой, он также может по-прежнему представлять интерес для других. Во-первых, как упоминал Петр, создайте свои намерения:

     Intent tweetIntent = new Intent(Intent.ACTION_SEND); tweetIntent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore"); tweetIntent.setType("application/twitter"); 

    «application / twitter» на самом деле является известным типом контента, см. здесь . Теперь, когда вы пытаетесь начать работу с этим намерением, она будет показывать всевозможные приложения, которые на самом деле не являются клиентами Twitter, но хотят часть действия. Как уже упоминалось в парах «почему вы даже хотите это сделать?» некоторые ответы, некоторые пользователи могут найти это полезным. С другой стороны, если у меня есть кнопка в моем приложении, в которой говорится «Tweet this!», Пользователь очень рассчитывает, что это вызовет клиента Twitter.

    Это означает, что вместо того, чтобы просто запускать активность, нам нужно отфильтровать те, которые подходят:

     PackageManager pm = getPackageManager(); List lract = pm.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY); boolean resolved = false; for(ResolveInfo ri: lract) { if(ri.activityInfo.name.endsWith(".SendTweet")) { tweetIntent.setClassName(ri.activityInfo.packageName, ri.activityInfo.name); resolved = true; break; } } 

    Вам нужно будет немного поэкспериментировать с разными провайдерами, но если имя заканчивается на «.SendTweet», вы довольно безопасны (это название активности в Twidroyd). Вы также можете проверить свой отладчик на имена пакетов, которые хотите использовать, и соответственно настроить сравнение строк (т. Е. Twidroyd использует «com.twidroid. *»).

    В этом простом примере мы просто выбираем первое совпадающее действие, которое мы находим. Это вызывает клиента Twitter напрямую, без необходимости делать какие-либо выборы. Если нет надлежащих клиентов Twitter, мы возвращаемся к стандартным выборам:

     startActivity(resolved ? tweetIntent : Intent.createChooser(tweetIntent, "Choose one")); 

    Вы можете расширить код и принять во внимание тот случай, если есть более одного клиента Twitter, когда вы можете создать свой собственный диалог выбора из всех названий действий, которые вы найдете.

    Эти ответы слишком сложны.

    Если вы просто выполняете нормальное намерение url, которое делает для Twitter.com, вы получите этот экран:

    введите описание изображения здесь

    который дает вам возможность перейти на сайт, если у вас нет приложений для Twitter.

     String url = "https://twitter.com/intent/tweet?source=webclient&text=TWEET+THIS!"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 

    Или

    • Вы начинаете действие с намерения с действием Intent.ACTION_SEND и text/plain Intent.ACTION_SEND MIME-типом. У вас будут все приложения, поддерживающие отправку текста. Это должен быть любой клиент Twitter, а также Gmail, dropbox и т. Д.
    • Или вы пытаетесь найти конкретное действие каждого клиента, о котором вы знаете, например, «com.twitter.android.PostActivity» для официального клиента . Это укажет на этого клиента, и вряд ли это будет полный список.
    • Или, вы начинаете со второго пункта, и возвращаетесь к первому …

    Неа. Тип намерения – это что-то вроде image/png или application/pdf , то есть типа файла, а с помощью createChooser вы в основном спрашиваете, какие приложения могут открывать этот тип файла.

    Теперь нет такой вещи, как файл application/twitter который можно открыть, так что это не сработает. Я не знаю другого способа добиться того, чего вы хотите.

    С http://twidroid.com/plugins/

    objective ACTION_SEND от Twidroid

     Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is a sample message via Public Intent"); sendIntent.setType("application/twitter"); startActivity(Intent.createChooser(sendIntent, null)); 

    Я использовал ответ «billynomates» и смог использовать hashtags с помощью функции URLEncoder.encode (, «UTF-8»). Хэш-tags появились просто отлично.

     String originalMessage = "some message #MESSAGE"; String originalMessageEscaped = null; try { originalMessageEscaped = String.format( "https://twitter.com/intent/tweet?source=webclient&text=%s", URLEncoder.encode(originalMessage, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if(originalMessageEscaped != null) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(originalMessageEscaped)); startActivity(i); } else { // Some Error } 
    Interesting Posts

    Реляционная firebase database проектирует несколько типов пользователей

    Как заставить Alsa выбрать предпочтительное звуковое устройство автоматически?

    Изменить размер изображения Codeigniter?

    Самый короткий путь для преобразования одного слова в другое

    Блокирует Console.WriteLine?

    Дублируемое окно через мониторы

    Что будет форматировать C: \ do?

    Распространение с помощью data.frame / tibble с повторяющимися идентификаторами

    Как указать уровень сжатия при использовании tar -zcvf?

    Как сделать анимацию линии более гладкой?

    Как разблокировать загруженные файлы в Windows 8 Consumer Preview?

    Как отключить «автономный режим» gradleиента в студии Android?

    Как запросить контент-провайдера Android MediaStore, избегая потерянных изображений?

    Как перемонтировать извлеченный (а не только размонтированный) USB-накопитель на Mac?

    Почему мой компьютер успешно загружается только при отключении от сети в течение более нескольких минут?

    Давайте будем гением компьютера.