我想使用我的应用程序在Twitter上分享图像和文字。我使用Fabric SDK并遵循其官方网站上的指南。问题是我的图像没有存储在手机存储器中,而是一个URL链接。所以,当我通过该URL时,它显示不像FB共享。
下面我已经发布了Tried代码。
private void shareViaTwitt() {
final String myUrlStr = "http://i.stack.imgur.com/2FCsj.png";
URL url;
Uri uri = null;
try {
url = new URL(myUrlStr);
uri = Uri.parse(url.toURI().toString());
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
TweetComposer.Builder builder = new TweetComposer.Builder(getContext())
.text("Hi this is Sample twitter sharing")
.image(uri);
builder.show();
}
谢谢。
答案 0 :(得分:0)
/*In their official site has said need put file type uri that stored in
phone/SD storage. So Here I just save it and get that uri and then pass it to
fabric builder.*/
private void shareViaTwitt() {
final String myUrlStr = "http://i.stack.imgur.com/2FCsj.png";
TweetComposer.Builder builder = null;
try {
Bitmap bm = getBitmapFromURL(myUrlStr);
Uri uri = getImageUri(getContext(), bm);
builder = new TweetComposer.Builder(getContext())
.text("Sample Text")
.image(uri)
.url(new URL(""https://www.newurl.....));
builder.show();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
public static Bitmap getBitmapFromURL(String src) {
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}