Android - 如何检测用户是否选择使用意图分享到 Facebook 或 Twitter? [英] Android - How do I detect if user has chosen to share to Facebook or twitter using intent?

查看:37
本文介绍了Android - 如何检测用户是否选择使用意图分享到 Facebook 或 Twitter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个分享到 facebook、twitter 等的应用程序.但我想执行不同的功能 取决于用户分享给谁,例如用户分享到 Facebook 做一件事,但如果用户分享到 Twitter 做另一件事.

I've created an application which shares to facebook, twitter etc. But I want to perform different functions dependent on who the user is sharing to, for instance if the user is sharing to Facebook do one thing but if the user shares to twitter do another.

我该怎么做?

到目前为止我的代码如下:

My code so far is below:

private void ShareSub() {
    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("text/plain");
    i.putExtra(
            Intent.EXTRA_TEXT,
            "You've just shared "
                    + "Awesome");
    startActivity(i);
}

进一步解释以上代码:

当用户按下操作栏中的menu_item_share"按钮时,将触发上述功能.这个函数然后会出现一个像下图这样的框,它允许用户选择一个特定的选项,例如脸书或推特.然后将 Intent.EXTRA_TEXT 共享给该特定应用.

When the user presses the "menu_item_share" button in the action bar, the function above is triggered. This function then makes a box like the image below appear, which allows the user to select a particular option, e.g. Facebook or twitter. The Intent.EXTRA_TEXT is then shared to that particular app.

我想要的是,当用户点击例如 Facebook 时,会调用一个特定的功能,例如通过他们(Facebook 的)api 等分享.

What I'm wanting is, when the user clicks for instance Facebook, a particular function is called e.g. Sharing via their (Facebook's) api etc.

我没有像下面那样使用 ShareActionProvider:

I'm not using ShareActionProvider like below:

   <item
        android:id="@+id/your_share_item"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:showAsAction="ifRoom"
        android:title="@string/share"/>

相反,我创建了一个调用函数 ShareSub 的简单按钮:

Instead, I've created a simple button which calls the function ShareSub:

<item
    android:id="@+id/menu_item_share"
    android:icon="@android:drawable/ic_menu_share"
    android:showAsAction="ifRoom"
    android:title="Share"/>

我选择这样做的原因是,我不希望出现最近分享到按钮,如下图所示.当我尝试使用下面建议的代码时,这给我带来了问题,因为我没有使用 ShareActionProvider.

The reason I've chosen to do it this way is, I don't want the recently shared to button to appear, as in the image below. This is causing me problems when I attempt to use the code suggested below because I haven't used ShareActionProvider.

推荐答案

您无法直接找出选择了哪个应用,但您可以显示自己的选择器对话框.

You can't directly find out which app was chosen, but you can display your own Chooser dialog.

不要调用 startActivity(i),而是获取使用 queryIntentActivities().

Instead of calling startActivity(i), get a list of all activities (facebook, twitter etc) that are registered to handle your intent using queryIntentActivities().

List<ResolveInfo> activities = getPackageManager().queryIntentActivities (i, 0);

每个 ResolveInfo 都是一个可以处理您的意图的应用程序.现在,您可以显示包含标签或图标列表的 AlertDialog.当用户从列表中选择一个标签时,您可以在对话框的点击处理程序中处理特定于应用程序的操作.

Each ResolveInfo is an app that can handle your intent. Now you can show an AlertDialog containing a list of labels or icons. When the user selects a label from the list, you can handle what do to on an app-specific basis in the click handler for the dialog.

编辑:这是一个完整的工作示例

EDIT: Here's a full working example

private void ShareSub() {
    final Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("text/plain");
    i.putExtra(Intent.EXTRA_TEXT,"text");

    final List<ResolveInfo> activities = getPackageManager().queryIntentActivities (i, 0);

    List<String> appNames = new ArrayList<String>();
    for (ResolveInfo info : activities) {
        appNames.add(info.loadLabel(getPackageManager()).toString());
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Complete Action using...");
    builder.setItems(appNames.toArray(new CharSequence[appNames.size()]), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            ResolveInfo info = activities.get(item);
            if (info.activityInfo.packageName.equals("com.facebook.katana")) {
                // Facebook was chosen
            } else if (info.activityInfo.packageName.equals("com.twitter.android")) {
                // Twitter was chosen
            }

            // start the selected activity
            i.setPackage(info.activityInfo.packageName);
            startActivity(i);
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}

这篇关于Android - 如何检测用户是否选择使用意图分享到 Facebook 或 Twitter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆