微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 打开屏幕并在关闭时开始活动

如何解决Android 打开屏幕并在关闭时开始活动

我正在制作一个闹钟应用程序,我正处于需要显示闹钟屏幕 (AlarmActivity) 的阶段,因为来自 broadcastReceiver 的 onReceive 被调用。 以下是我需要在闹钟响起时完成的事情。

  1. 当屏幕关闭时,打开设备并在时间到时显示警报屏幕。
  2. 当屏幕打开但应用关闭时,显示闹钟屏幕。
  3. 当屏幕开启且用户在闹钟应用中时,显示闹钟屏幕。

我试过这个代码,但它不起作用。 Start activity even when screen is turned off

我的主要活动的onCreate是..

        setContentView(R.layout.activity_main);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        Intent myIntent1 = new Intent(this,AlarmReceiver.class);
        myIntent1.putExtra("msg","Wake up Wake up1");
        myIntent1.putExtra("repeat",0);
        PendingIntent pendingIntent1 = PendingIntent.getbroadcast(this,2571123,myIntent1,PendingIntent.FLAG_UPDATE_CURRENT);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY,19);
        calendar.set(Calendar.MINUTE,48);
        calendar.set(Calendar.SECOND,00);

        alarmManager.setExact(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent1);

它会在特定时间设置闹钟。

这是我的 AlarmReceiver 类。

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public void onReceive(Context context,Intent intent) {
        String msg = intent.getStringExtra("msg");
        Log.d("ALARMONMATE",msg);

        Intent intent1 = new Intent(context,SampleAlarmActivity.class);
        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent1.putExtra("msg",msg);
        context.startActivity(intent1);

这是我的 AlarmActivity.java,我想在闹钟时显示的屏幕。

public class SampleAlarmActivity extends AppCompatActivity {
    private PowerManager.WakeLock wake = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample_alarm);

        Intent intent = getIntent();
        String msg = intent.getStringExtra("msg");
        TextView txt = findViewById(R.id.textView);
        txt.setText(msg);






        PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
        wake = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,"App:wakeuptag");
        wake.acquire(1*60*1000);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            setShowWhenLocked(true);
            setTurnScreenOn(true);
        } else {
            getwindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_disMISS_KEyguard|
                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
                    WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
        }
    }
}


如果有人至少可以留下我可以参考的链接在这种情况下有用的概念,那就太好了。 我已经研究了 WakeLock 以及关于这个问题的 20 多个问题。但是,我不太确定它们是否已经过时,因为它们中的大多数都来自 8 多年前。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?