startChooser()方法和startActivity()

时间:2018-07-05 09:48:06

标签: android android-intent start-activity

我是android的新手,我注意到我可以通过2种方式共享意图。

第一种方式:

ShareCompat.IntentBuilder.from(this). setType(mimeType). setChooserTitle(title). setText(text). startChooser();

第二种方法是:

Intent shareIntent =   ShareCompat.IntentBuilder.from(this)
                                                .setChooserTitle(title)
                                                .setType(mimeType)
                                                .setText(text)
                                                .getIntent();
    if (shareIntent.resolveActivity(getPackageManager()) != null){
        startActivity(shareIntent);
    }

我的问题是,使用startChooser()是否可以使我免于以第二种方式使用的支票? ..这两个功能之间还有其他区别吗?

2 个答案:

答案 0 :(得分:1)

  

使用startChooser()会使我从我在   第二?

否。

IntentBuilder基本上是一个帮助程序类,用于构造共享意图(Intent#ACTION_SENDIntent#ACTION_SEND_MULTIPLE)并启动共享内容的活动。

  

这两个功能之间还有其他区别

在后台,startChooser()和startActivity()都执行相同的操作。 startChooser()仅包装startActivity()。查看startChooser()的定义:

    /**
     * Start a chooser activity for the current share intent.
     *
     * <p>Note that under most circumstances you should use
     * {@link ShareCompat#configureMenuItem(MenuItem, IntentBuilder)
     *  ShareCompat.configureMenuItem()} to add a Share item to the menu while
     * presenting a detail view of the content to be shared instead
     * of invoking this directly.</p>
     */
     public void startChooser() {
        mActivity.startActivity(createChooserIntent());
     }

我建议您使用第二种方法,该方法可以更好地控制错误情况并向用户提供有意义的信息。

答案 1 :(得分:0)

  

第一种方式:

这里您将Intent交给框架,但是您不知道设备中是否有任何应用程序可以处理该Intent。

  

第二种方式:

您首先要确保设备上至少有一个可以处理意图的应用程序。

第二种方式是您有一种方法来处理意外的流,而无需将该意图传递给框架。就像您可以通知用户“没有可用的应用程序来处理该操作”。