使用闹钟和锁屏打开活动

时间:2021-01-01 17:30:56

标签: android broadcastreceiver alarmmanager lockscreen

我想打开一个有闹钟的活动。但是当我尝试我找到的所有代码时,当挂起的意图尝试打开活动时,所有代码都会崩溃。 所以,代码应该解决两件事: 1:报警时开启一个活动(在broadcastreceiver onReceive中) 2:即使在锁屏状态下也可以打开活动(打开一个柔光的活动作为昏暗的灯光警报应用程序)

代码逻辑:在主要活动中,我用一个按钮启动一个警报,创建一个警报。闹钟应该打开一个 WakeupActivity

实际代码是:

file AlarmReciever:

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent activityIntent = new Intent(context, WakeupActivity.class).putExtra("byAlarm","yes");
        context.startActivity(activityIntent); //start
        // Get the PendingIntent containing the entire back stack
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        PendingIntent resultPendingIntent =stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        Toast.makeText( context,"event onReceive ",Toast.LENGTH_SHORT).show();
    }
}

并在文件中:MainActivity.java

public void btnAlarmSetWakeup(View view) {
        //--------< btnAlarmSetWakeup() >--------
        //< check OverLay Activity >
        if (!Settings.canDrawOverlays(this)) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, 0);
        }
        //</ check OverLay Activity >

        AlarmManager am = (AlarmManager)   this.getSystemService(Context.ALARM_SERVICE);
        //Print("inside scheduleAlarm  "+interval);
        //logger.writeLog("inside schedule alarm and interval is "+interval);
        am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ 5000, getPendingIntent(this,12345));



        //--------</ btnAlarmSetWakeup() >--------
    }

    private PendingIntent getPendingIntent(Context context, int id) {
        Intent intent =  new Intent(context, AlarmReceiver.class)
                .putExtra("alarmId", id);
        return PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }

和 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demowakeupactivity">

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.DemoWakeupActivity">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".WakeupActivity"
            android:parentActivityName=".MainActivity" />
        <receiver android:name=".AlarmReceiver"></receiver>
    </application>


</manifest>

0 个答案:

没有答案
相关问题