我是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()
是否可以使我免于以第二种方式使用的支票? ..这两个功能之间还有其他区别吗?
答案 0 :(得分:1)
使用
startChooser()
会使我从我在 第二?
否。
IntentBuilder基本上是一个帮助程序类,用于构造共享意图(Intent#ACTION_SEND
和Intent#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。
第二种方式:
您首先要确保设备上至少有一个可以处理意图的应用程序。
第二种方式是您有一种方法来处理意外的流,而无需将该意图传递给框架。就像您可以通知用户“没有可用的应用程序来处理该操作”。