2015-05-27 3 views
1

Моего кода ниже -Не может передавать изображения на WeChat и линию с использованием ACTION_SEND намерения

Intent prototype = new Intent(Intent.ACTION_SEND); 
prototype.setData(uri); // uri is of the image file 
prototype.setType(image/*); 
prototype.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

prototype.putExtra(Intent.EXTRA_STREAM, uri); 

List<ResolveInfo> resInfo = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
     if (!resInfo.isEmpty()) 
     { 
      for (ResolveInfo resolveInfo : resInfo) 
      { 
       if (resolveInfo.activityInfo == null) 
       { 
        continue; 
       } 

       // Retrieve the package name and class name to populate the chooser intent 
       Intent intent = (Intent) prototype.clone(); 
       String packageName = resolveInfo.activityInfo.packageName; 
       intent.setPackage(packageName); 
       intent.setClassName(packageName, resolveInfo.activityInfo.name); 
      targetedIntents.add(intent); 
     }} 
      Intent chooserIntent = Intent.createChooser(topIntents.remove(targetedIntents.size() - 1), chooserTitle); 
       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[] {})); 

Когда я выбираю WeChat и приложение Line из Chooser, ничего не происходит. Приложение Line просто отображает сообщение об ошибке, которое невозможно передать. WeChat не дает никаких сообщений. Совместное использование отлично работает на Whatsapp и Hangouts с использованием моего кода.

Мы можем обмениваться изображениями с WeChat и Line из галереи. Как это работает? Разве это не намерение отправки?

+0

«Мой код такой, как показано ниже» - нет, это не так, поскольку этот код не будет компилироваться. "Как это работает?" - 'ACTION_SEND'. Что такое ваш 'Uri'? Поскольку вы используете 'FLAG_GRANT_READ_URI_PERMISSION', используете ли вы' FileProvider' или реализуете собственный потоковый контент ContentProvider? – CommonsWare

+0

Привет @CommonsWare, я реализую свой собственный контент-провайдер. Поскольку мой код является собственностью, я не могу публиковать его целиком. Uri имеет вид формы: // .... и изображение хранится в каталоге моего приложения. Странная часть заключается в том, что мой код работает в Hangouts, Whatsapp, FB messenger, но не работает для WeChat и Line. Я также использую намерение ACTION_SEND в моем коде, но в чем причина того, что обмен не работает для меня, тогда как он работает для Gallery. – user1154309

+0

Вы можете попробовать смешать в [my 'LegacyCompatCursorWrapper'] (https://github.com/commonsguy/cwac-provider#usage-legacycompatcursorwrapper) свой метод' query() 'в вашем' ContentProvider' или иначе попытаться реализовать [этот шаблон] (http://stackoverflow.com/a/25020642/115145) для работы с некоторыми плохо написанными потоковыми клиентами ContentProvider. – CommonsWare

ответ

0

У меня была та же проблема, поэтому я осуществил следующее:

shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_SUBJECT,sharesubject); 
shareIntent.putExtra(Intent.EXTRA_TEXT, sharetext); 
shareIntent.setType("image/jpeg"); 
shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(destination)); 
shareIntent.setPackage(info.activityInfo.packageName); 

// назначения является имя файла, содержащего изображение, которое будет общим.

Примечание: Это работает только для api 23 и ниже.