无法获得触发 USER_PRESENT 或 SCREEN_ON Android 模拟器的操作
Not able to get actions to fire USER_PRESENT or SCREEN_ON Android Emulator
我想知道用户何时打开 phone,例如。点击电源 button/possibly 实际上解锁了他们的 phone。最终目标是在调用 API 与使用计划更新后更新小部件的显示。
问题是我一直在搜索线程,但无法在 Logcat 中触发我的日志。 Receiver
和 Service
这两种方法我都试过了。我正在尝试的是可能的吗?
我也试过在清单中设置 READ_PHONE_STATE
权限。
我所拥有的一些代码上下文:
清单:
<receiver android:name=".CustomBroadcastRecveiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT">
<action android:name="android.intent.action.SCREEN_ON">
</intent-filter>
</receiver>
我尝试过的清单中的可选服务:
<service android:naem=".CustomService"/>
CustomBroadcastReceiver:
public class CustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("MyTag", "broadcast receive"); // this does not run
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT) {
Log... // this doesn't run, same for ACTION_SCREEN_ON that would be in a new if block
}
}
}
我愿意接受其他选择。如有必要,我可以提供更多上下文。我可以进一步扩展我的服务实施,如果这是假设我所追求的是可能的方式。
编辑
添加更多关于我如何使用 Elletlar 的答案的上下文
在我的 MainActivity 中我添加了:
private static Context context;
然后在onCreate里面:
context = getApplicationContext();
// instantiate my specific receiver
// set the code from answer below
注意:我是API 29,如果有什么不同的话。
来自“android.intent.action.SCREEN_ON”文档,“您无法通过清单中声明的组件接收此信息,只能通过
明确注册
Context#registerReceiver(BroadcastReceiver, IntentFilter).
显式注册示例:
myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(myReceiver, filter);
我想知道用户何时打开 phone,例如。点击电源 button/possibly 实际上解锁了他们的 phone。最终目标是在调用 API 与使用计划更新后更新小部件的显示。
问题是我一直在搜索线程,但无法在 Logcat 中触发我的日志。 Receiver
和 Service
这两种方法我都试过了。我正在尝试的是可能的吗?
我也试过在清单中设置 READ_PHONE_STATE
权限。
我所拥有的一些代码上下文:
清单:
<receiver android:name=".CustomBroadcastRecveiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT">
<action android:name="android.intent.action.SCREEN_ON">
</intent-filter>
</receiver>
我尝试过的清单中的可选服务:
<service android:naem=".CustomService"/>
CustomBroadcastReceiver:
public class CustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("MyTag", "broadcast receive"); // this does not run
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT) {
Log... // this doesn't run, same for ACTION_SCREEN_ON that would be in a new if block
}
}
}
我愿意接受其他选择。如有必要,我可以提供更多上下文。我可以进一步扩展我的服务实施,如果这是假设我所追求的是可能的方式。
编辑 添加更多关于我如何使用 Elletlar 的答案的上下文
在我的 MainActivity 中我添加了:
private static Context context;
然后在onCreate里面:
context = getApplicationContext();
// instantiate my specific receiver
// set the code from answer below
注意:我是API 29,如果有什么不同的话。
来自“android.intent.action.SCREEN_ON”文档,“您无法通过清单中声明的组件接收此信息,只能通过
明确注册Context#registerReceiver(BroadcastReceiver, IntentFilter).
显式注册示例:
myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(myReceiver, filter);