13 java twitter android facebook android-intent
我创建了一个分享到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);
}
Run Code Online (Sandbox Code Playgroud)
以上代码的进一步说明:
当用户按下操作栏中的" menu_item_share "按钮时,触发上述功能.然后,此功能会显示如下图所示的框,允许用户选择特定选项,例如Facebook或Twitter.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"/>
Run Code Online (Sandbox Code Playgroud)
相反,我创建了一个调用ShareSub函数的简单按钮:
<item
android:id="@+id/menu_item_share"
android:icon="@android:drawable/ic_menu_share"
android:showAsAction="ifRoom"
android:title="Share"/>
Run Code Online (Sandbox Code Playgroud)
我选择这样做的原因是,我不希望最近共享的按钮出现,如下图所示.当我尝试使用下面建议的代码时,这会导致我出现问题,因为我没有使用过ShareActionProvider.

Nac*_*chi 19
您无法直接找到所选的应用程序,但您可以显示自己的"选配器"对话框.
而不是打电话startActivity(i),获取所有活动(Facebook,推特等)的列表,使用queryIntentActivities()注册处理您的意图.
List<ResolveInfo> activities = getPackageManager().queryIntentActivities (i, 0);
Run Code Online (Sandbox Code Playgroud)
每个ResolveInfo都是一个可以处理你的意图的应用程序.现在,您可以显示包含标签或图标列表的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();
}
Run Code Online (Sandbox Code Playgroud)
使用按操作栏中的按钮可触发上述功能.
如果您使用了ShareActionProvider替代,则可以通过实现a来检测用户何时从列表中选择特定应用程序ShareActionProvider.OnShareTargetSelectedListener.否则,除非您实施自己的活动选择器,否则您将无法检测选择了哪个应用程序.
这是一个例子:
菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/your_share_item"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="ifRoom"
android:title="@string/share"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
履行
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate your menu
getMenuInflater().inflate(R.menu.share, menu);
// The Intent you want to share
final Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, "Test");
// Set up your ShareActionProvider
final ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(
R.id.your_share_item).getActionProvider();
shareActionProvider.setShareIntent(i);
shareActionProvider.setOnShareTargetSelectedListener(new OnShareTargetSelectedListener() {
@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
final String packageName = intent.getComponent().getPackageName();
if (packageName.equals("com.facebook.katana")) {
// Do something for Facebook
} else if (packageName.equals("com.twitter.android")) {
// Do something for Twitter
}
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9671 次 |
| 最近记录: |