如何获得onClick事件的ShareActionProvider菜单项?
我的应用程序在库中显示了一些图像(带有imageView的片段),我需要获取onClick事件来从缓存加载当前图像,生成一个临时文件并共享它。
我的分享按钮:
<item android:id="@+id/menu_item_share"
android:showAsAction="ifRoom"
android:title="@string/menu_share"
android:actionProviderClass="android.widget.ShareActionProvider" />我试过:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.manage_keywords:
startActivity(new Intent(this, KeywordActivity.class));
return true;
case R.id.menu_item_share:
/*it should handle share option*/
return true;
}
return super.onOptionsItemSelected(item);
}和
menuShare = menu.findItem(R.id.menu_item_share);
menuShare.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// TODO Auto-generated method stub
return false;
}
});还有其他建议吗?谢谢!
发布于 2013-12-03 10:08:02
每次用户单击SDCard时,将要共享的图像保存到ShareActionProvider中,完整示例如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.menu, menu);
ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.shareactionprovider).getActionProvider();
shareActionProvider.setShareIntent(getShareIntent());
shareActionProvider.setOnShareTargetSelectedListener(new OnShareTargetSelectedListener() {
@Override
public boolean onShareTargetSelected(ShareActionProvider actionProvider, Intent intent) {
saveImageToSD();
return false;
}
});
return true;
}
private Intent getShareIntent() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
File sdCard = Environment.getExternalStorageDirectory();
File sharedFile = new File(sdCard+"/yourPath/yourImage.jpg");
Uri uri = Uri.fromFile(sharedFile);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
return shareIntent;
}
private void saveImageToSD() {
Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.yourimage);
OutputStream outStream = null;
try {
outStream = new FileOutputStream(getTempFile());
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
bm.recycle();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private File getTempFile() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File directory = new File(Environment.getExternalStorageDirectory() + "/yourPath/");
directory.mkdirs();
File file = new File(directory ,"yourImage.jpg");
try {
file.createNewFile();
} catch (IOException e) {}
return file;
} else {
return null;
}
} 发布于 2013-10-29 12:21:16
您的建议流不受ShareActionProvider支持。您需要分叉它,或者想出其他的共享解决方案。
或者,更好的是,实现一个可以提供映像的ContentProvider,这样您就可以首先在ShareActionProvider中使用适当的Intent,而不需要根据用户对共享目标的选择来更改它。通过使用您自己的ContentProvider,您可能可以完全避免使用临时文件。根据图像存储的位置, may be sufficient for your needs。
发布于 2013-10-29 11:57:43
我还没有检查过,但是我会尝试使用OnMenuItemClickListener事件
https://stackoverflow.com/questions/19657266
复制相似问题