要求:
我的应用程序中有一个“分享”按钮。我需要通过 Facebook 分享。我需要选择是否安装本机 Facebook 应用程序。如果未安装应用程序,我们的决定是将用户发送到 facebook.com 进行分享。
当前状态:
我可以检测何时未安装本机应用程序(通过包名称),并向选择器添加其他意图。
问题:
用户必须选择通过“Facebook 的网站”共享的项目显示“浏览器”并带有 Android 浏览器图标。LabeledIntent 项目未出现,我收到“未找到 Intent { act=android.intent.action.VIEW dat=...} 的活动
代码(简化...):
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, "check this out");
intent.putExtra(Intent.EXTRA_TEXT, urlToShare);
boolean facebookInstalled = false;
Intent chooser = Intent.createChooser(intent, "Share this link!");
if (!facebookInstalled)
{
Intent urlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.facebook.com/sharer/sharer.php?u=" + Uri.encode(urlToShare)));
Intent niceUrlIntent = new LabeledIntent(urlIntent, context.getApplicationContext().getPackageName(), "Facebook's Website", R.drawable.icon);
// Ideally I would only add niceUrlIntent in the end, but that doesn't add anything to the chooser as-is
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[urlIntent, niceUrlIntent]);
}
context.startActivity(chooser);
解决方案
正如@CommonsWare 指出的那样,解决方案是使用 LabeledIntent 来包装一个指向我创建的新 Activity 的意图,该意图只是将 ACTION_VIEW 意图发送到适当的 Uri。
Intent myActivity = new Intent(context, ViewUriActivity.class);
myActivity.putExtra(ViewUriActivity.EXTRA_URI, "http://...");
Intent niceUrlIntent = new LabeledIntent(myActivity, context.getApplicationContext().getPackageName(), "Facebook's Website", R.drawable.icon);
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{niceUrlIntent});
ViewUriActivity 如下所示:
public final class ViewUriActivity extends Activity
{
public static final String EXTRA_URI = ViewUriActivity.class.getSimpleName() + "EXTRA_URI";
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent urlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getIntent().getExtras().getString(EXTRA_URI)));
startActivity(urlIntent);
finish();
}
}