java - Android - 如何检测用户是否选择使用 Intent 分享到 Facebook 或 Twitter?

标签 java android facebook android-intent twitter

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

我该怎么做?

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

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”按钮时,会触发上述功能。然后这个函数会出现一个如下图所示的框,允许用户选择一个特定的选项,例如 Facebook 或推特。 Intent.EXTRA_TEXT 随后会共享到该特定应用。

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

enter image description here

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

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

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

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

我选择这样做的原因是,我不想显示recently shared to 按钮,如下图所示。当我尝试使用下面建议的代码时,这会给我带来问题,因为我没有使用 ShareActionProvider

enter image description here

最佳答案

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

不是调用 startActivity(i),而是使用 queryIntentActivities() 获取已注册以处理您的 Intent 的所有 Activity (facebook、twitter 等)的列表| .

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

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

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

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

关于java - Android - 如何检测用户是否选择使用 Intent 分享到 Facebook 或 Twitter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23494624/

相关文章:

php - 什么时候需要使用存储在数据库中的访问 token ?

php - 动态获取Facebook应用程序的用户访问 token

java - 如何在抽屉导航中显示图像

java - Android:ffmpeg 的文件名包含空格

android - 如何在 Android 中使用 GeoTools 显示 map ?

android - 如何强制通知以多行显示文本?

java哈希函数冲突

java - 使用运行时从 Java 运行 smbclient 命令

java - Android Camera2 API,限制焦距的最佳方法?

facebook - graph.facebook.com/username 不起作用