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;
       }
   }