ShareActionProvider Android系统菜单
我的菜单有点问题。我单击我的ShareActionProvider Android系统菜单,android,menu,Android,Menu,我的菜单有点问题。我单击我的菜单项,然后共享,我想打开我的意图(选择器)。但我有安卓系统项目 我的代码: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); MenuItem item = menu.findItem(R.id.file); mShareActionProvid
菜单项
,然后共享,我想打开我的意图(选择器)。但我有安卓系统项目
我的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
MenuItem item = menu.findItem(R.id.file);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
setShareIntent();
return true;
}
private void setShareIntent() {
Resources resources = getResources();
Intent emailIntent = new Intent();
emailIntent.setAction(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_native)));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject));
emailIntent.setType("message/rfc822");
PackageManager pm = getPackageManager();
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
Intent openInChooser = Intent.createChooser(emailIntent, resources.getString(R.string.share_chooser_text));
List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0);
List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();
for (int i = 0; i < resInfo.size(); i++) {
ResolveInfo ri = resInfo.get(i);
String packageName = ri.activityInfo.packageName;
if(packageName.contains("android.email")) {
emailIntent.setPackage(packageName);
} else if(packageName.contains("twitter") || packageName.contains("facebook") || packageName.contains("mms") || packageName.contains("android.gm")) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
if(packageName.contains("twitter")) {
intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_twitter));
} else if(packageName.contains("facebook")) {
intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_facebook));
} else if(packageName.contains("mms")) {
intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_sms));
} else if(packageName.contains("android.gm")) {
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_gmail)));
intent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject));
intent.setType("message/rfc822");
}
intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
}
}
LabeledIntent[] extraIntents = intentList.toArray( new LabeledIntent[ intentList.size() ]);
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
mShareActionProvider.setShareIntent(openInChooser);
//startActivity(openInChooser);
}
我不明白
我的菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.app.FragmentsSliderNews" >
<item android:id="@+id/file"
android:title="Share"
android:icon="@drawable/ic_action_share"
app:actionProviderClass=
"android.support.v7.widget.ShareActionProvider">
</item>
</menu>
谢谢大家的回答。摆脱
createChooser()
。您只能将其与startActivity()
一起使用,而不能用于android中的ShareActionProvider
通过选项共享
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "News for you!");
intent.putExtra(android.content.Intent.EXTRA_TEXT,"Additional text");
startActivity(Intent.createChooser(intent, "Share via"));
**下面可能会显示对Facebook、Gmail和Twitter的过滤**
Updated to Share Text + Image:
Select the image from the SDCard:
String fileName = "image-3116.jpg";
String externalStorageDirectory =
Environment.getExternalStorageDirectory().toString();
String myDir = externalStorageDirectory + "/saved_images/"; // the
// file will be in saved_images
Uri uri = Uri.parse("file:///" + myDir + fileName);
enter code here
通过Twitter分享
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
(String)v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)
v.getTag(R.drawable.ic_launcher));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
{
if ("com.twitter.android.PostActivity".equals(app.activityInfo.name))
{
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new
ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
}
}
Intent shareIntent=newintent(android.content.Intent.ACTION\u SEND);
shareIntent.setType(“文本/普通”);
shareIntent.putExtra(android.content.Intent.EXTRA_主题,
(String)v.getTag(R.String.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_文本,(字符串)
v、 getTag(R.drawable.ic_发射器);
shareIntent.putExtra(Intent.EXTRA_流,uri);
PackageManager pm=v.getContext().getPackageManager();
List activityList=pm.querytentActivities(shareIntent,0);
对于(最终解决方案信息应用程序:activityList)
{
if(“com.twitter.android.PostActivity.equals(app.activityInfo.name))
{
最终活动信息活动=app.ActivityInfo;
最终组件名称=新
组件名称(activity.applicationInfo.packageName、activity.name);
shareIntent.addCategory(Intent.CATEGORY_启动器);
shareIntent.setFlags(Intent.FLAG_活动_新任务|)
意图。标记活动重置任务(如果需要);
setComponent(名称);
v、 getContext().startActivity(shareIntent);
打破
}
}
通过Facebook分享
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String)
v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)
v.getTag(R.drawable.ic_launcher));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
{
if ((app.activityInfo.name).contains("facebook"))
{
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new
ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
}
}
Intent shareIntent=newintent(android.content.Intent.ACTION\u SEND);
shareIntent.setType(“文本/普通”);
shareIntent.putExtra(android.content.Intent.EXTRA_主题,(字符串)
v、 getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_文本,(字符串)
v、 getTag(R.drawable.ic_发射器);
shareIntent.putExtra(Intent.EXTRA_流,uri);
PackageManager pm=v.getContext().getPackageManager();
List activityList=pm.querytentActivities(shareIntent,0);
对于(最终解决方案信息应用程序:activityList)
{
如果((app.activityInfo.name).contains(“facebook”))
{
最终活动信息活动=app.ActivityInfo;
最终组件名称=新
组件名称(activity.applicationInfo.packageName、activity.name);
shareIntent.addCategory(Intent.CATEGORY_启动器);
shareIntent.setFlags(Intent.FLAG_活动_新任务|)
意图。标记活动重置任务(如果需要);
setComponent(名称);
v、 getContext().startActivity(shareIntent);
打破
}
}
通过Gmail共享
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String)
v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)
v.getTag(R.drawable.ic_launcher));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
{
if ((app.activityInfo.name).contains("android.gm"))
{
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new
ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
}
}
Intent shareIntent=newintent(android.content.Intent.ACTION\u SEND);
shareIntent.setType(“文本/普通”);
shareIntent.putExtra(android.content.Intent.EXTRA_主题,(字符串)
v、 getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_文本,(字符串)
v、 getTag(R.drawable.ic_发射器);
shareIntent.putExtra(Intent.EXTRA_流,uri);
PackageManager pm=v.getContext().getPackageManager();
List activityList=pm.querytentActivities(shareIntent,0);
对于(最终解决方案信息应用程序:activityList)
{
if((app.activityInfo.name).contains(“android.gm”))
{
最终活动信息活动=app.ActivityInfo;
最终组件名称=新
组件名称(activity.applicationInfo.packageName、activity.name);
shareIntent.addCategory(Intent.CATEGORY_启动器);
shareIntent.setFlags(Intent.FLAG_活动_新任务|)
意图。标记活动重置任务(如果需要);
setComponent(名称);
v、 getContext().startActivity(shareIntent);
打破
}
}
没关系,我将代码更改为:
@覆盖
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
MenuItem=menu.findItem(R.id.file);
mShareActionProvider=(ShareActionProvider)MenuItemCompat.getActionProvider(项);
mShareActionProvider.setOnShareTargetSelectedListener(此);
item.setOnMenuItemClickListener(新的MenuItem.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
openShare();
返回false;
}
});
返回true;
}
私有void openShare(){
Resources=getResources();
Intent emailIntent=新Intent();
emailIntent.setAction(Intent.ACTION\u SEND);
emailIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(resources.getString(R.string.share_email_native));
emailIntent.putExtra(Intent.EXTRA_主题,resources.getString(R.string.share_email_主题));
emailIntent.setType(“message/rfc822”);
PackageManager pm=getPackageManager();
Intent sendIntent=新的Intent(Intent.ACTION\U SEND);
sendIntent.setType(“文本/普通”);
Intent openInChooser=Intent.createChooser(emailIntent,resources.getString(R.string.share\u chooser\u text));
List resInfo=pm.querytentActivities(sendIntent,0);
List intentList=new ArrayList();
对于(int i=0;i Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String)
v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)
v.getTag(R.drawable.ic_launcher));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
{
if ((app.activityInfo.name).contains("android.gm"))
{
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new
ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
}
}