所以按照伊恩湖的这篇伟大文章 - https://medium.com/google-developers/sharing-content-between-android-apps-2e6db9d1368b#.7rmkunfyi
我能够使用ShareCompat从我的应用程序成功共享文本或.png。
这很好用,除非我分享到gmail,图像的路径被添加到"到"领域。类似" // packagename / fileprovider / images / image.png"
正如文章底部所讨论的,这可以通过删除来解决 intent.setData(数据)。但这会打破MMS和本机邮件客户端。
我想知道是否有人能发现我做错的事情。该代码适用于大多数应用程序,Whatsapp,Facebook,环聊。
OutputStream outStream;
File imageFile = new File(activity.getFilesDir(), name + ".png");
try {
outStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch(Exception e) {
Toast.makeText(activity, activity.getString(R.string.share_error_toast), Toast.LENGTH_LONG).show();
return;
}
Uri uriToImage = FileProvider.getUriForFile(activity, BuildConfig.DOCUMENT_PROVIDER, imageFile);
Intent shareIntent = ShareCompat.IntentBuilder.from(activity)
.setStream(uriToImage)
.setType(activity.getContentResolver().getType(uriToImage))
.getIntent();
if (shareIntent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivity(shareIntent);
}
并抛出异常 09-16 12:04:04.065 25012-25012 /? W / Mms_UI_CMA:更新sendbutton视图 09-16 12:04:04.076 25012-25404 /? E / Mms / image:initFromContentUri无法加载图像uri java.lang.IllegalArgumentException:column' mime_type'不存在 在android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333) 在android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:87) 在com.android.mms.ui.UriImage.initFromContentUri(UriImage.java:222) 在com.android.mms.ui.UriImage。(UriImage.java:86) 在com.android.mms.model.ImageModel.initModelFromUri(ImageModel.java:94) 在com.android.mms.model.ImageModel。(ImageModel.java:76) 在com.android.mms.ui.SlideshowEditor.changeImage(SlideshowEditor.java:298) 在com.android.mms.ui.RichMessageEditor.internalChangeMedia(RichMessageEditor.java:666) 在com.android.mms.ui.RichMessageEditor.access $ 800(RichMessageEditor.java:103) 在com.android.mms.ui.RichMessageEditor $ 6.run(RichMessageEditor.java:549) 在com.android.mms.ui.AsyncDialog $ ModalDialogAsyncTask.doInBackground(AsyncDialog.java:135) 在com.android.mms.ui.AsyncDialog $ ModalDialogAsyncTask.doInBackground(AsyncDialog.java:87) 在android.os.AsyncTask $ 2.call(AsyncTask.java:307) 在java.util.concurrent.FutureTask.run(FutureTask.java:237) 在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:246) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588) 在java.lang.Thread.run(Thread.java:833) 09-16 12:04:04.079 25012-25404 /? E / RichMessageEditor:internalChangeMedia: com.google.android.mms.MmsException:媒体类型未知。 在com.android.mms.model.ImageModel.initModelFromUri(ImageModel.java:98) 在com.android.mms.model.ImageModel。(ImageModel.java:76) 在com.android.mms.ui.SlideshowEditor.changeImage(SlideshowEditor.java:298) 在com.android.mms.ui.RichMessageEditor.internalChangeMedia(RichMessageEditor.java:666) 在com.android.mms.ui.RichMessageEditor.access $ 800(RichMessageEditor.java:103) 在com.android.mms.ui.RichMessageEditor $ 6.run(RichMessageEditor.java:549) 在com.android.mms.ui.AsyncDialog $ ModalDialogAsyncTask.doInBackground(AsyncDialog.java:135) 在com.android.mms.ui.AsyncDialog $ ModalDialogAsyncTask.doInBackground(AsyncDialog.java:87) 在android.os.AsyncTask $ 2.call(AsyncTask.java:307) 在java.util.concurrent.FutureTask.run(FutureTask.java:237) 在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:246) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588) 在java.lang.Thread.run(Thread.java:833) 09-16 12:04:04.091 891-902 /?我/艺术:对象分配现在很忙,所以在增长堆之前。新堆大小为91 MB