我需要在我的应用中与WhatsApp共享图像。我有图片网址。为了与WhatsApp共享,我使用以下代码。
String image_url = "http://images.cartradeexchange.com//img//800//vehicle//Honda_Brio_562672_5995_6_1438153637072.jpg";
URI uri = null;
try {
uri = new URI(image_url.toString());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("uri=", "" + uri);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/jpg");
// Target whatsapp:
shareIntent.setPackage("com.whatsapp");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
startActivity(shareIntent);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(InventoryManageOnlineActivity.this,
"Whatsapp have not been installed.",
Toast.LENGTH_SHORT).show();
}
但它没有用。我收到以下错误。
08-26 11:57:34.674: W/Bundle(19447): Key android.intent.extra.STREAM expected Parcelable but value was a java.net.URI. The default value <null> was returned.
08-26 11:57:34.738: W/Bundle(19447): Attempt to cast generated internal exception:
08-26 11:57:34.738: W/Bundle(19447): java.lang.ClassCastException: java.net.URI cannot be cast to android.os.Parcelable
08-26 11:57:34.738: W/Bundle(19447): at android.os.Bundle.getParcelable(Bundle.java:810)
08-26 11:57:34.738: W/Bundle(19447): at android.content.Intent.getParcelableExtra(Intent.java:4850)
08-26 11:57:34.738: W/Bundle(19447): at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7548)
08-26 11:57:34.738: W/Bundle(19447): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1545)
08-26 11:57:34.738: W/Bundle(19447): at android.app.Activity.startActivityForResult(Activity.java:3746)
08-26 11:57:34.738: W/Bundle(19447): at android.app.Activity.startActivityForResult(Activity.java:3707)
08-26 11:57:34.738: W/Bundle(19447): at android.app.Activity.startActivity(Activity.java:4027)
08-26 11:57:34.738: W/Bundle(19447): at android.app.Activity.startActivity(Activity.java:3989)
08-26 11:57:34.738: W/Bundle(19447): at com.cartradrexchange.inventory.InventoryManageOnlineActivity$ManageOnlineAdapter.onClick(InventoryManageOnlineActivity.java:441)
08-26 11:57:34.738: W/Bundle(19447): at android.view.View.performClick(View.java:4761)
08-26 11:57:34.738: W/Bundle(19447): at android.view.View$PerformClick.run(View.java:19767)
08-26 11:57:34.738: W/Bundle(19447): at android.os.Handler.handleCallback(Handler.java:739)
08-26 11:57:34.738: W/Bundle(19447): at android.os.Handler.dispatchMessage(Handler.java:95)
08-26 11:57:34.738: W/Bundle(19447): at android.os.Looper.loop(Looper.java:135)
08-26 11:57:34.738: W/Bundle(19447): at android.app.ActivityThread.main(ActivityThread.java:5312)
08-26 11:57:34.738: W/Bundle(19447): at java.lang.reflect.Method.invoke(Native Method)
08-26 11:57:34.738: W/Bundle(19447): at java.lang.reflect.Method.invoke(Method.java:372)
08-26 11:57:34.738: W/Bundle(19447): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
08-26 11:57:34.738: W/Bundle(19447): at com.android.internal.os.ZygoteInit.main(Zygote
为此,我在Google搜索了很多内容,并按照以下网址
Android sharing image doesn't work
但它对我没用。请告诉我如何共享图片网址。
答案 0 :(得分:1)
CheckOut这个答案
How to share an image on whats app which is set on an ImageView in android
BTW我不明白为什么你在做image_url.toString()
?它已经在字符串中了吗?
并尝试此代码。
String image_url = "http://images.cartradeexchange.com//img//800//vehicle//Honda_Brio_562672_5995_6_1438153637072.jpg";
Intent shareIntent = new Intent();
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setAction(Intent.ACTION_SEND);
//without the below line intent will show error
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, image_url);
// Target whatsapp:
shareIntent.setPackage("com.whatsapp");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
startActivity(shareIntent);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(InventoryManageOnlineActivity.this,
"Whatsapp have not been installed.",
Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:0)
通过使用此功能,您可以在whatsapp上发送文字和网址。
sendIntent.setPackage("com.whatsapp");
仅在whatsapp上使用共享消息,您可以在其中选择要与之分享的联系人。
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "http://images.cartradeexchange.com//img//800//vehicle//Honda_Brio_562672_5995_6_1438153637072.jpg");
sendIntent.setType("text/plain");
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
在清单中添加互联网权限
<uses-permission android:name="android.permission.INTERNET" />
答案 2 :(得分:0)
使用以下代码: -
whatsapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = c.getPackageManager().getLaunchIntentForPackage("com.whatsapp");
if(intent1!=null)
{
Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
whatsappIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
whatsappIntent.setType("image/*");
whatsappIntent.setPackage("com.whatsapp");
String url = Spacecraft.new_image_array.get(position);
new Download_GIF(url).execute();
Uri imageUri = Uri.parse("file:///storage/emulated/0/downloadedFile.gif");
whatsappIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
c.startActivity(whatsappIntent);
}
Download_GIF Class。
public class Download_GIF extends AsyncTask<String, Void, String> {
static String url_image=null;
public Download_GIF(String url) {
this.url_image = url;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String filepath = null;
try {
//set the download URL, a url that points to a file on the internet
//this is the file to be downloaded
URL url = new URL(url_image);
//create the new connection
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//set up some things on the connection
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
//and connect!
urlConnection.connect();
//set the path where we want to save the file
//in this case, going to save it on the root directory of the
//sd card.
File SDCardRoot = Environment.getExternalStorageDirectory();
//create a new file, specifying the path, and the filename
//which we want to save the file as.
String filename = "downloadedFile.gif"; // you can download to any type of file ex:.jpeg (image) ,.txt(text file),.mp3 (audio file)
Log.i("Local filename:", "" + filename);
File file;
file = new File(SDCardRoot, filename);
if (file.createNewFile()) {
file.createNewFile();
}
//this will be used to write the downloaded data into the file we created
FileOutputStream fileOutput = new FileOutputStream(file);
//this will be used in reading the data from the internet
InputStream inputStream = urlConnection.getInputStream();
//this is the total size of the file
int totalSize = urlConnection.getContentLength();
//variable to store total downloaded bytes
int downloadedSize = 0;
//create a buffer...
byte[] buffer = new byte[1024];
int bufferLength = 0; //used to store a temporary size of the buffer
//now, read through the input buffer and write the contents to the file
while ((bufferLength = inputStream.read(buffer)) > 0) {
//add the data in the buffer to the file in the file output stream (the file on the sd card
fileOutput.write(buffer, 0, bufferLength);
//add up the size so we know how much is downloaded
downloadedSize += bufferLength;
//this is where you would do something to report the prgress, like this maybe
Log.i("Progress:", "downloadedSize:" + downloadedSize + "totalSize:" + totalSize);
}
//close the output stream when done
fileOutput.close();
if (downloadedSize == totalSize) filepath = file.getPath();
//catch some possible errors...
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
filepath = null;
e.printStackTrace();
}
Log.i("filepath:", " " + filepath);
return filepath;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
答案 3 :(得分:0)
首先,您需要滑动加载图像,然后才能将其共享到任何地方。
代码以滑行方式加载图像(图像已保存到存储中,以后可以删除)
Glide.with(getApplicationContext())
.load(imagelink) \\link of your image file (url)
.asBitmap().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)
.into(new SimpleTarget<Bitmap>(250, 250) {@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Hey view/download this image");
String path = MediaStore.Images.Media.insertImage(getContentResolver(), resource, "", null);
Log.i("quoteswahttodo", "is onresoursereddy" + path);
Uri screenshotUri = Uri.parse(path);
Log.i("quoteswahttodo", "is onresoursereddy" + screenshotUri);
intent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
intent.setType("image/*");
startActivity(Intent.createChooser(intent, "Share image via...")); // if you want to share with whatsapp only replace with below code
}
@Override public void onLoadFailed(Exception e, Drawable errorDrawable) {
Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_SHORT).show();
super.onLoadFailed(e, errorDrawable);
}
@Override public void onLoadStarted(Drawable placeholder) {
Toast.makeText(getApplicationContext(), "Starting", Toast.LENGTH_SHORT).show();
super.onLoadStarted(placeholder);
}
});
在此替换Whatsapp:
sendd.setPackage("com.whatsapp");
try {
startActivity(sendd);
} catch (Exception e) {
Toast.makeText(FinishedDoing.this, "It seem like Whatsapp is not been installed", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}