我创建了一个分享到 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 等分享。
我没有像下面那样使用 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。
最佳答案
您无法直接找出选择了哪个应用程序,但您可以显示自己的选择器对话框。
不是调用 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/