Android 如何在屏幕解锁时启动应用程序?
我已经尝试过这个代码,但它不起作用。有人有不同的解决方案吗?我已经尝试了很多方法,比如下面的Stack Overflow方法,但是没有一种有效 manifest.xmlAndroid 如何在屏幕解锁时启动应用程序?,android,broadcastreceiver,screen-lock,Android,Broadcastreceiver,Screen Lock,我已经尝试过这个代码,但它不起作用。有人有不同的解决方案吗?我已经尝试了很多方法,比如下面的Stack Overflow方法,但是没有一种有效 manifest.xml <receiver android:name=".ScreenReceiver"> <intent-filter> <action android:name="android.intent.action.SCREEN_OFF"/> <action android:name="an
<receiver android:name=".ScreenReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
<action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>
要收听屏幕开/关,您的应用程序应按时间运行,并以编程方式将广播接收器注册到操作系统 ScreenOnOffService.java
public class ScreenOnOffService extends Service {
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
super.onCreate();
Log.i("ScreenOnOffService", "onCreate: ");
IntentFilter intentFilter = new IntentFilter();
// intentFilter.addAction("android.intent.action.SCREEN_OFF");
intentFilter.addAction("android.intent.action.SCREEN_ON");
registerReceiver(ScreenOnReceiver.newInstance(), intentFilter);
}
public void onDestroy() {
super.onDestroy();
Log.i("ScreenOnOffService", "onDestroy: ");
unregisterReceiver(ScreenOnReceiver.newInstance());
// startService(new Intent(this,ScreenOnOffService.class));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_STICKY;
}
}
ScreenOnReceiver.java
public class ScreenOnReceiver extends BroadcastReceiver {
public static final String TAG = "ScreenOn";
public static volatile ScreenOnReceiver screenOn;
public static ScreenOnReceiver newInstance() {
if (screenOn == null) {
screenOn = new ScreenOnReceiver();
}
return screenOn;
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("hieuN", "intent: " + intent.getAction());
// do work. start activity.
}
}
在活动中启动服务
Intent service = new Intent(this, ScreenOnOffService.class);
startService(service);
屏幕打开或关闭无法再列入清单。您应该运行前台服务并通过代码注册ScreenReceiver,然后它就会工作。您可以用代码示例解释一下吗@海军上将:除非这项服务几乎马上就被杀,否则它就不可靠了。前台服务会让情况变得更糟。但最终,没有真正的方法来保证你能可靠地听屏幕的开或关。@GabeSechan是的。将服务设为前台,几乎不可关闭,它将解决问题。它只在我最小化应用程序并锁定屏幕时起作用。但是,当我完全退出应用程序,并从最小化中销毁它时,它就不起作用了@AdmiralKunkka@AqibAbbas因为当你刷掉它的时候,服务被终止,因此没有注册的侦听器。即使在这种情况下,在现代版本的Android上也不可能一直听下去。您的应用程序需要运行。@AqibAbbas将ScreenOnReceiver.java更改为前台服务,然后当您刷出时,它仍能工作。只是不适合中国手机。
Intent service = new Intent(this, ScreenOnOffService.class);
startService(service);