作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 list 中声明接收器并让它工作时遇到了一些麻烦。
我知道自 android 8.0 以来, list 中不能声明任何隐式广播接收器,但它可以是显式声明的接收器。
所以我在 list 中这样声明我的:
<receiver android:name=".util.AppReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="com.ibermatica.mime.starttracking" />
</intent-filter>
</receiver>
之后,我在手机中以 Debug模式安装应用程序,并在 onReceive 方法中放置一个断点,其中包含以下代码:
if(intent.getAction() != null){
switch (intent.getAction()){
case Util.START_TRACKING:
Intent i;
i = new Intent(context, LocationUpdatesService.class);
context.startService(i);
break;
default:
}
}
所以我使用以下命令从命令行发送广播消息,让应用程序在后台运行:
adb shell am broadcast -a com.ibermatica.mime.starttracking
但是没有任何反应,接收者也没有被调用。有什么问题或我必须做些什么来解决这个问题?
提前致谢!
最佳答案
I know since android 8.0 there can't be any implicit broadcast receivers declared in manifest, but it can be explicit receivers declared.
“显式”和“隐式”是用来指代 Intent
对象类型的术语,而不是 list 条目。
But nothing happens, nor the receiver gets called.
正确。您正在命令行上创建隐式 Intent
,并且隐式 Intent
广播通常在 Android 8.0+ 上不起作用。
尝试:
adb shell am broadcast -n com.whatever/.util.AppReceiver -a com.ibermatica.mime.starttracking
将 com.whatever
替换为您的应用程序 ID。
关于android - 如何在 Android 9 上声明显式接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689752/
我是一名优秀的程序员,十分优秀!