gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:39 28 4
gpt4 key购买 nike

我创建了一个分享到 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com