如何在Android应用中每天重复一次操作?

问题描述 投票:2回答:1

我想每天重复一次行动;即使应用程序未运行或设备已重新启动(重新启动),它也必须继续工作。在我的代码中,我试图每1分钟显示一条TOAST消息(作为测试);它在模拟器中运行良好,但在真实设备上它不起作用(我尝试做一些修改,因为我在一些答案中看到但仍然是相同的事情)

MyReceiver

class MyReceiver : BroadcastReceiver() {
    private val channelId = "com.medanis.hikamwahimam"

    override fun onReceive(context: Context, intent: Intent) {
        Log.i("TAG","/////////////////// SHOW NOTIFICATION NOW //////////////////////")
        val builder = NotificationCompat.Builder(context, channelId)
            .setSmallIcon(R.drawable.ic_stat_name)
            .setLargeIcon(BitmapFactory.decodeResource(context.resources,R.mipmap.ic_launcher_round))
            .setContentTitle("My notification")
            .setContentText("Much longer text that cannot fit one line...")
            .setStyle(
                NotificationCompat.BigTextStyle()
                    .bigText("Much longer text that cannot fit one line...Much longer text that cannot fit one line..."))
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        with(NotificationManagerCompat.from(context)) {
            notify(12345, builder.build()) }
        Toast.makeText(context,"This toast will be shown every X minutes", Toast.LENGTH_LONG).show()
    }
}

主要信息

class MainActivity : AppCompatActivity() {
    private var mAlarmManager : AlarmManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
//        showNotification()

        val mIntent = Intent(this, MyReceiver::class.java)

        val mPendingIntent = PendingIntent.getBroadcast(this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT)
        mAlarmManager = this
            .getSystemService(Context.ALARM_SERVICE) as AlarmManager
        mAlarmManager!!.setRepeating(
            AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
            60000, mPendingIntent
        )
    }
}

AndroidManifest.xml中

<receiver android:name=".MyReceiver" >
</receiver>

问题是:

1 / - 此代码不适用于REAL DEVICE。

2 / - 如果用户重新启动设备,则此代码不起作用。

关于GitHub的一个样本(我已经做了一些改变,正如我朋友的建议,但仍然是相同的错误)

android kotlin alarmmanager android-alarms periodicity
1个回答
0
投票

1 / - 此代码不适用于REAL DEVICE。

我已经下载了你的项目,在我的设备上运行它可以工作,当我点击开始时它会显示Toast,每一分钟都会显示。

我建议你看看这个question

2 / - 如果用户重新启动设备,则此代码不起作用。

如果要在重启或关闭设备后重新启动BroadcastReceiver,可能需要添加以下代码:

在你的manifest.xml中添加这个

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

receiver创建另一个manifest.xml

<receiver android:name=".BootCompletedIntentReceiver">
   <intent-filter>
     <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
</receiver>

然后创建一个BroadcastReceiver,就像你之前用来展示Toast一样

class BootCompletedIntentReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if ("android.intent.action.BOOT_COMPLETED" == intent.action) {
          //Start your old broadcastreceiver
        }
    }
}

有关更多信息,您可以查看此post

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.