gpt4 book ai didi

当应用程序在前台时,Android AlarmManager 打开屏幕

转载 作者:行者123 更新时间:2023-12-05 07:51:26 24 4
gpt4 key购买 nike

我正在创建一个闹钟应用程序,因此我想使用 AlarmManager 在特定时间运行我的应用程序。它应该会打开屏幕并禁用任何键锁。

如果应用程序关闭或在后台运行,一切正常。 AlarmMager 调用我的 BroadcastReceiver,我可以在那里开始我的 Activity 。屏幕继续亮起,我看到了我的应用程序。

问题是我的应用程序是否已经在屏幕关闭的情况下处于前台。我可以听到我的应用程序的声音,所以我知道闹钟已经响起,但屏幕没有打开。

我试过使用任务和窗口设置,但没有成功。 Intent.FLAG_ACTIVITY_NEW_TASK,

这个问题也可能与我没有在 onCreate 方法中设置所有窗口属性有关。我只想在应用程序也确定存在警报事件并在 onCreate 之后触发 startWakeup 时打开屏幕。

AndroidManifest.xml

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application ...>
<activity
android:name=".FullscreenActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:process=":remote" android:name=".AlarmMan"></receiver>
<receiver android:name=".AutoStart">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
...
</activity>
</application>

报警器.java

public class AlarmMan extends BroadcastReceiver
{
@Override
public void onReceive (Context context, Intent intent)
{
Intent i = new Intent(context, FullscreenActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}

全屏 Activity .java

public class FullscreenActivity extends AppCompatActivity {   
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}

public void startWakeup() {
runOnUiThread(new Runnable() {
@Override
public void run() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mainFrame.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LOW_PROFILE |
View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
}
});
}

public void stopWakeup() {
runOnUiThread(new Runnable() {
@Override
public void run() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

mainFrame.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_VISIBLE
);
}
});
}

最佳答案

onReceive() 方法中的第一件事可能是获取 wake lock

别忘了释放它。

关于当应用程序在前台时,Android AlarmManager 打开屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com