一段时间后从后台开始活动

时间:2020-12-31 19:46:48

标签: android firebase-cloud-messaging background-process sleep-mode

我正在开发一个需要在收到 FCM 消息时启动活动的应用。 一切正常,但只要我有一段时间不使用手机并且手机进入睡眠模式并且活动不会开始。如何防止我的应用进入休眠状态并强制它一直保持在后台?

我实际上想运行一个类似于 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消息后,我开始活动如下

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);

在这两种方法中,活动越过锁开始运行,但过了一段时间它不再工作了。

p.n. 我还从手机设置中的睡眠应用程序中手动删除了我的应用程序。但没有用。

1 个答案:

答案 0 :(得分:0)

我通过设置优先级解决了我的问题:FCM 消息上的“高”