隐式 Intent 指定能够在可以执行相应操作的设备上调用任何应用的操作。如果您的应用无法执行该操作而其他应用可以,且您希望用户选取要使用的应用,则使用隐式 Intent 非常有用。
例如,如果您希望用户与他人共享您的内容,请使用 ACTION_SEND
操作创建 Intent,并添加指定共享内容的 extra。使用该 Intent 调用startActivity()
时,用户可以选取共享内容所使用的应用。
注意:用户可能没有任何应用处理您发送到startActivity()
的隐式 Intent。如果出现这种情况,则调用将会失败,且应用会崩溃。要验证 Activity 是否会接收 Intent,请对Intent
对象调用resolveActivity()
。如果结果为非空,则至少有一个应用能够处理该 Intent,且可以安全调用startActivity()
。如果结果为空,则不应使用该 Intent。如有可能,您应停用发出该 Intent 的功能。
// Create the text message with a string Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage); sendIntent.setType("text/plain"); // Verify that the intent will resolve to an activity if (sendIntent.resolveActivity(getPackageManager()) != null) { startActivity(sendIntent); }
注:在这种情况下,系统并没有使用 URI,但已声明 Intent 的数据类型,用于指定 extra 携带的内容。
调用 startActivity()
时,系统将检查已安装的所有应用,确定哪些应用能够处理这种 Intent(即:含ACTION_SEND
操作并携带“text/plain”数据的 Intent )。如果只有一个应用能够处理,则该应用将立即打开并为其提供 Intent。如果多个 Activity 接受 Intent,则系统将显示一个对话框,使用户能够选取要使用的应用。