一段时间后从后台启动 activity
start an activity from background after a while
我正在开发一个需要在收到 FCM 消息时启动 activity 的应用程序。
一切正常,但只要我暂时不使用 phone 并且 phone 进入睡眠模式并且 activity 不会启动。如何防止我的应用进入休眠状态并强制它一直处于后台?
我实际上想要 运行 调用 activity 就像 WhatsApp 使用的那样。
我已将以下权限添加到清单文件:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<activity
android:name=".RingingActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:screenOrientation="sensorPortrait"
android:showOnLockScreen="true"
android:showWhenLocked="true"
android:theme="@style/AppTheme.NoActionBar"
android:turnScreenOn="true" />
并且我在 setContentView
之前将以下代码添加到我的 RingingActivity
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setShowWhenLocked(true);
setTurnScreenOn(true);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager != null)
keyguardManager.requestDismissKeyguard(RingingActivity.this, null);
} else {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
收到FCM消息后,我开始activity如下
public void onMessageReceived(RemoteMessage message){
\...
Intent ringing_intent = new Intent(getApplicationContext(), RingingActivity.class);
ringing_intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(ringing_intent);
}
我还使用 AlarmManager
启动了 activity
am =(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
pendingIntent = PendingIntent.getActivity(this,
12345, ringing_intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 100, pendingIntent);
在这两种方法中,activity 越过锁定并开始 运行ning,但过了一会儿它就不再工作了。
p.n。
我还从 phone 设置中的睡眠应用程序中手动删除了我的应用程序。但没有用。
我通过设置优先级解决了我的问题:FCM 消息上的“高”
我正在开发一个需要在收到 FCM 消息时启动 activity 的应用程序。 一切正常,但只要我暂时不使用 phone 并且 phone 进入睡眠模式并且 activity 不会启动。如何防止我的应用进入休眠状态并强制它一直处于后台?
我实际上想要 运行 调用 activity 就像 WhatsApp 使用的那样。 我已将以下权限添加到清单文件:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<activity
android:name=".RingingActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:screenOrientation="sensorPortrait"
android:showOnLockScreen="true"
android:showWhenLocked="true"
android:theme="@style/AppTheme.NoActionBar"
android:turnScreenOn="true" />
并且我在 setContentView
之前将以下代码添加到我的 RingingActivity if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setShowWhenLocked(true);
setTurnScreenOn(true);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager != null)
keyguardManager.requestDismissKeyguard(RingingActivity.this, null);
} else {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
收到FCM消息后,我开始activity如下
public void onMessageReceived(RemoteMessage message){
\...
Intent ringing_intent = new Intent(getApplicationContext(), RingingActivity.class);
ringing_intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(ringing_intent);
}
我还使用 AlarmManager
启动了 activityam =(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
pendingIntent = PendingIntent.getActivity(this,
12345, ringing_intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 100, pendingIntent);
在这两种方法中,activity 越过锁定并开始 运行ning,但过了一会儿它就不再工作了。
p.n。 我还从 phone 设置中的睡眠应用程序中手动删除了我的应用程序。但没有用。
我通过设置优先级解决了我的问题:FCM 消息上的“高”