【问题标题】:Android share intent chooserAndroid 分享意图选择器
【发布时间】:2011-05-24 19:14:36
【问题描述】:

我正在使用类似这样的东西通过用户手机上的可用应用程序共享一些文本。

public void share(String subject,String text) {
     final Intent intent = new Intent(Intent.ACTION_SEND);

     intent.setType("text/plain");
     intent.putExtra(Intent.EXTRA_SUBJECT, subject);
     intent.putExtra(Intent.EXTRA_TEXT, text);

     startActivity(Intent.createChooser(intent, getString(R.string.share)));
}

我的主要问题是,例如,如果用户选择 Twitter 而不是电子邮件,我希望使用不同的文本(带有短 URL 的简短版本 VS 带有附加图像的全文)。

怎么不知道用户决定使用哪个应用程序?

【问题讨论】:

标签: android facebook twitter android-intent


【解决方案1】:

一旦您使用 createChooser 将文本交给系统后,您将无法再更改文本。

【讨论】:

  • 所以我必须建立自己的选择器? :-/ 笨拙的 API 设计不是吗?在这种情况下,是否有关于如何专门为 Twitter 或 Facebook 创建意图的示例代码?
  • 有问题的应用程序必须发布自己的公共 api 来发送推文、更新状态等。Twitdroid 是我所知道的唯一一个这样做的应用程序,没有其他应用程序遵循它的约定。我个人不介意这种设计,我认为便利是值得的。
  • 确实很方便,但是很难适应消息长度的限制。我可能只是添加一个对话框,询问用户是否想以短文本或长文本的形式分享内容。就实现您需要的点击次数而言不是最佳的,但到目前为止我能想到的唯一方法。感谢您的意见。
  • 您可以为意图指定包,但我建议不要这样做。而是制作您自己的选择器,其中包含一些服务(Twitter)的特殊情况。更好的是使用“短文本”或其他内容的复选框来制作自己的选择器。
【解决方案2】:
 Intent intent = new Intent(Intent.ACTION_SEND);

 intent.setType("text/plain");
 intent.putExtra(Intent.EXTRA_SUBJECT, subject);
 intent.putExtra(Intent.EXTRA_TEXT, textWhichYouWantToShare);

 startActivity(Intent.createChooser(intent, getString(R.string.share)));

【讨论】:

    【解决方案3】:

    点击社交(前推特)

    shareOnSocial(activity, h.shareTwitter, Global.TWITTER_ID, shareContent, activity.getResources().getString(R.string.error_twitter));
    

    关于创建选择器

    shareOnSocial(activity, h.shareChooser, "choose", shareContent, activity.getResources().getString(R.string.error));
    

    方法分享

    private void shareOnSocial(Activity mAct, View shareView, String packageId, String content, String error) {
        shareView.startAnimation(clickAnimation);
        Intent i = new Intent();
        i.setAction(Intent.ACTION_SEND);
        i.putExtra(Intent.EXTRA_TEXT, content);
        i.setType("text/plain");
    
        if (!packageId.equals("choose")) {
            i.setPackage(packageId);
            try {
                mAct.startActivity(i);
            } catch (android.content.ActivityNotFoundException ex) {
                Toast.makeText(mAct, error, Toast.LENGTH_SHORT).show();
            }
        } else {
            mAct.startActivity(Intent.createChooser(i, mAct.getString(R.string.share)));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2012-06-07
      相关资源
      最近更新 更多