基本上,区分隐性和显式意图是显而易见的
明确意图指定了一个组件(通过 setComponent(ComponentName)或setClass(Context,Class)),其中 提供要运行的确切类。通常这些不包括任何 其他信息,只是一种应用程序启动的方式 当用户与之交互时,它具有的各种内部活动 应用
隐含意图尚未指定组件;相反,他们必须 包括足够的信息,以便系统确定哪个 可用组件最适合该意图运行。
但我对谷歌在https://developer.android.com/about/versions/oreo/background.html#broadcasts
上的介绍感到困惑例如, ACTION_PACKAGE_REPLACED 是隐式广播,因为 它被发送给所有注册的听众,让他们知道一些 设备上的包装被更换了。然而, ACTION_MY_PACKAGE_REPLACED 不是隐式广播,因为它是 只发送给已更换软件包的应用程序,无论多少 其他应用程序已为该广播注册了听众。
为什么 ACTION_MY_PACKAGE_REPLACED 不是隐式广播?
答案 0 :(得分:2)
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$lastyear = date('Y-m-d', strtotime("-1 year"));
$order = $objectManager->create('Magento\Sales\Model\Order')->getCollection()->addAttributeToFilter('customer_id', $customer_id)->addAttributeToFilter('state', 'complete')->addAttributeToFilter('created_at', ['gteq' => $lastyear]);
是仅针对您的应用程序广播的意图,因为它仅在您的应用程序被替换时触发。这使它成为一个明确的Intent,因此不受android O的限制。
但是,每当更换软件包时,ACTION_MY_PACKAGE_REPLACED
都会发送到每个应用程序,因此它不是特定于您的应用程序的。这使得它是一个隐含的Intent,并且在android O的新背景规则下被禁止使用。
答案 1 :(得分:0)
为什么ACTION_MY_PACKAGE_REPLACED不是隐式广播?
因为这就是Google编写发送ACTION_MY_PACKAGE_REPLACED
广播的代码的方式。他们创建一个明确的Intent
,标识接收广播的特定接收者。它们还附加动作字符串,以防接收器碰巧接收多个广播并且需要区分彼此。欢迎使用明确的Intent
来获取操作字符串。隐式Intents
之间的区别在于Intent
是否标识组件。