Я создал Android-мобильный Android с Xamarin Android. В этом приложении есть функция, которая может отправить изображение в твиттер. Я тестировал эту функцию после загрузки приложения из магазина воспроизведения на Samsung S7, alcatel Pixi4 и моего планшета (Galaxy Tab 2). Мой код создает файл растрового изображения во внешнем кэшированном хранилище и запрашивает твиттер для чтения этого файла, чтобы привязать его к твиту.Почему я не могу читать мои файлы в каталоге внешнего кэша?
Он отлично работает. Тем не менее, я попросил других проверить его (они также загрузили мое приложение из магазина воспроизведения), и они сказали мне, что файл создан в каталоге кеша, но растровое изображение не привязано к их твитам. Важно также знать, что другие приложения, которые делают, что (например, долгое твит) работают на всех устройствах:
https://play.google.com/store/apps/details?id=de.cbruegg.longtweet
Я не понимаю. Twitter, работает на всех устройствах. Это проверено. Приложения (например, длинные твиты) могут отправить файл в твиттер, чтобы чирикать это. Это также работает на всех устройствах. Кроме того, мое приложение прекрасно записывает файлы в каталог кеша. Работает на всех устройствах. Кроме того, мое приложение может отправить растровое изображение в твиттер, чтобы чирикать изображение. Это работает на моем S7. Но не на S7 моего тестера. Я не понимаю. Вот мой код. В некотором роде я делаю что-то неправильно. Кстати, генерация твитов всегда работает. Это просто случай, когда изображение не прикрепляется к твиту при тестировании на устройстве моего тестера.
Вот мой код. Пожалуйста, дайте мне знать, как я должен это улучшить.
public bool TweetImage(Bitmap imageToTweet)
{
var messageIntent = context.FindMessageIntent(this.twitterConstants.PackageName);
if (messageIntent == null)
{
return false;
}
string outputFileBMP = SaveBitmap(imageToTweet);
context.Tweet(messageIntent, outputFileBMP, this.twitterConstants.DefaultTwitterText, this.twitterConstants.ChooserMessage);
return true;
}
private string SaveBitmap(Bitmap imageToTweet)
{
string outputFileBMP = System.IO.Path.Combine(context.ExternalCacheDir.Path, System.Guid.NewGuid().ToString() + ".bmp");
using (var outputFileStream = System.IO.File.Create(outputFileBMP))
{
imageToTweet.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, outputFileStream);
}
return outputFileBMP;
}
и
public static Intent FindMessageIntent(this ContextWrapper contextWrapper, params string[] packageNames)
{
Intent wantedIntent = new Intent();
wantedIntent.SetType("text/plain");
var resolveInfos = contextWrapper.PackageManager.QueryIntentActivities(wantedIntent, PackageInfoFlags.MatchDefaultOnly);
var result = (from r in resolveInfos
from p in packageNames
where p == r.ActivityInfo.PackageName
select p).FirstOrDefault();
if (result != null)
{
wantedIntent.SetPackage(result);
return wantedIntent;
}
return null;
}
и
public static void Tweet(this ContextWrapper contextWrapper, Intent messageIntent, string filePath = null, string message = null, string chooserMessage = null)
{
if (filePath != null)
{
using (var file = new Java.IO.File(filePath))
{
messageIntent.PutExtra(Intent.ExtraStream, Android.Net.Uri.FromFile(file));
}
}
if (message != null)
{
messageIntent.PutExtra(Intent.ExtraText, message);
}
if (chooserMessage != null)
{
using (var chooser = Intent.CreateChooser(messageIntent, chooserMessage))
{
contextWrapper.StartActivity(chooser);
}
return;
}
contextWrapper.StartActivity(messageIntent);
}