尝试通过 ShareAction Provider 共享图像时 Whatsapp 崩溃
Whatsapp crashes when trying to share Image through ShareAction Provider
因此,我首先从可绘制文件夹中获取图像,然后尝试通过 ShareActionProvider
共享相同图像,但 Whatsapp(或任何其他应用程序)一直崩溃。它成功发送了文本,但没有发送图像。图片为PNG格式。
这是我的菜单XML布局:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.android.shareactivity.ShareActivity">
<item
android:title="share"
android:id="@+id/action_share"
android:orderInCategory="2"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
/>
</menu>
这是我对 ShareActionProvider
的实现
public class Sharing extends AppCompatActivity {
private ShareActionProvider mShareActionProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sharing);
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
//Share Action Provider
MenuItem menuItem = menu.findItem(R.id.action_share);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
if(mShareActionProvider!=null) {
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
sharingIntent.setType("image/*");
sharingIntent.putExtra(Intent.EXTRA_STREAM, R.drawable.untitled);
// sharingIntent.setType("text/*");
// sharingIntent.putExtra(Intent.EXTRA_TEXT,"Hello World");
mShareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
mShareActionProvider.setShareIntent(sharingIntent);
}
return true;
}
}
问题出在这一行
sharingIntent.putExtra(Intent.EXTRA_STREAM, R.drawable.untitled);
您不能将包内的可绘制对象传递给任何其他应用程序,您必须将其作为 png 或 jpg 写入磁盘,然后将该文件的路径共享给 whatsapp。
如果您的 targetSdkVersion 为 24 或以上,您将必须使用文件提供程序与任何其他应用共享您的文件
因此,我首先从可绘制文件夹中获取图像,然后尝试通过 ShareActionProvider
共享相同图像,但 Whatsapp(或任何其他应用程序)一直崩溃。它成功发送了文本,但没有发送图像。图片为PNG格式。
这是我的菜单XML布局:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.android.shareactivity.ShareActivity">
<item
android:title="share"
android:id="@+id/action_share"
android:orderInCategory="2"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
/>
</menu>
这是我对 ShareActionProvider
public class Sharing extends AppCompatActivity {
private ShareActionProvider mShareActionProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sharing);
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
//Share Action Provider
MenuItem menuItem = menu.findItem(R.id.action_share);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
if(mShareActionProvider!=null) {
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
sharingIntent.setType("image/*");
sharingIntent.putExtra(Intent.EXTRA_STREAM, R.drawable.untitled);
// sharingIntent.setType("text/*");
// sharingIntent.putExtra(Intent.EXTRA_TEXT,"Hello World");
mShareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
mShareActionProvider.setShareIntent(sharingIntent);
}
return true;
}
}
问题出在这一行
sharingIntent.putExtra(Intent.EXTRA_STREAM, R.drawable.untitled);
您不能将包内的可绘制对象传递给任何其他应用程序,您必须将其作为 png 或 jpg 写入磁盘,然后将该文件的路径共享给 whatsapp。
如果您的 targetSdkVersion 为 24 或以上,您将必须使用文件提供程序与任何其他应用共享您的文件