如何使用 Kotlin 在 Android Studio 中每小时重复一个函数?
How to Repeat a function every Hour in Android Studio using Kotlin?
我想每隔一小时(例如)重复一个功能(或任何操作),即使该应用不是 运行。
我创建了一个演示项目,您可以看一下:
https://github.com/joancolmenerodev/BroadcastReceiverAndAlarmManagerInKotlin
你首先要创建一个BroadcastReceiver
, and then using AlarmManager
你可以决定你想要被调用的时间间隔。
创建一个 BroadcastReceiver
您可以按如下方式进行:
val broadCastReceiver = object : BroadcastReceiver() {
override fun onReceive(contxt: Context?, intent: Intent?) {
toast("This toast will be shown every X minutes")
}
}
然后你有这个方法来开始工作:
val mIntent = Intent(context, broadCastReceiver)
val mPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, mIntent, 0)
val mAlarmManager = context
.getSystemService(Context.ALARM_SERVICE) as AlarmManager
mAlarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(),
CHANGETOYOURDESIREDSECONDS, mPendingIntent
)
然后即使应用已关闭,您也可以看到 Toast。
编辑
您可以使用 context.registerReceiver(receiver, IntentFilter("something"))
注册您的 BroadcastReceiver
然后添加到 mIntent
和 "something" 的操作。
如果您不喜欢这种方式,您可以创建一个名为 MyReceiver
的新 class 来扩展 BradcastReceiver
,如下所示:
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context,"This toast will be shown every X minutes", Toast.LENGTH_SHORT).show()
}
}
然后启动闹钟:
val mIntent = Intent(this, MyReceiver::class.java)
val mPendingIntent = PendingIntent.getBroadcast(this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val mAlarmManager = this
.getSystemService(Context.ALARM_SERVICE) as AlarmManager
mAlarmManager.setRepeating(
AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
WHATEVERYOUWANT, mPendingIntent
)
注:默认设置为60000
Value will be forced up to 60000 as of Android 5.1; don't rely on this to be exact
如果您使用的是 AndroidX(JetPack) 库,则考虑使用 Workmanager
简单示例:
public class MyWorker extends Worker {
static final String TAG = "workmng";
@NonNull
@Override
public WorkerResult doWork() {
Log.d(TAG, "doWork: start");
//Do your job here
Log.d(TAG, "doWork: end");
return WorkerResult.SUCCESS;
}
}
然后像这样开始,每小时做你的工作:
PeriodicWorkRequest myWorkRequest = new PeriodicWorkRequest.Builder(MyWorker.class, 60, TimeUnit.MINUTES)
.build();
在应用程序中添加 gradle 文件:
dependencies {
def work_version = 2.0.0
// (Java only)
implementation "androidx.work:work-runtime:$work_version"
}
我想每隔一小时(例如)重复一个功能(或任何操作),即使该应用不是 运行。
我创建了一个演示项目,您可以看一下:
https://github.com/joancolmenerodev/BroadcastReceiverAndAlarmManagerInKotlin
你首先要创建一个BroadcastReceiver
, and then using AlarmManager
你可以决定你想要被调用的时间间隔。
创建一个 BroadcastReceiver
您可以按如下方式进行:
val broadCastReceiver = object : BroadcastReceiver() {
override fun onReceive(contxt: Context?, intent: Intent?) {
toast("This toast will be shown every X minutes")
}
}
然后你有这个方法来开始工作:
val mIntent = Intent(context, broadCastReceiver)
val mPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, mIntent, 0)
val mAlarmManager = context
.getSystemService(Context.ALARM_SERVICE) as AlarmManager
mAlarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(),
CHANGETOYOURDESIREDSECONDS, mPendingIntent
)
然后即使应用已关闭,您也可以看到 Toast。
编辑
您可以使用 context.registerReceiver(receiver, IntentFilter("something"))
注册您的 BroadcastReceiver
然后添加到 mIntent
和 "something" 的操作。
如果您不喜欢这种方式,您可以创建一个名为 MyReceiver
的新 class 来扩展 BradcastReceiver
,如下所示:
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context,"This toast will be shown every X minutes", Toast.LENGTH_SHORT).show()
}
}
然后启动闹钟:
val mIntent = Intent(this, MyReceiver::class.java)
val mPendingIntent = PendingIntent.getBroadcast(this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val mAlarmManager = this
.getSystemService(Context.ALARM_SERVICE) as AlarmManager
mAlarmManager.setRepeating(
AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
WHATEVERYOUWANT, mPendingIntent
)
注:默认设置为60000
Value will be forced up to 60000 as of Android 5.1; don't rely on this to be exact
如果您使用的是 AndroidX(JetPack) 库,则考虑使用 Workmanager
简单示例:
public class MyWorker extends Worker {
static final String TAG = "workmng";
@NonNull
@Override
public WorkerResult doWork() {
Log.d(TAG, "doWork: start");
//Do your job here
Log.d(TAG, "doWork: end");
return WorkerResult.SUCCESS;
}
}
然后像这样开始,每小时做你的工作:
PeriodicWorkRequest myWorkRequest = new PeriodicWorkRequest.Builder(MyWorker.class, 60, TimeUnit.MINUTES)
.build();
在应用程序中添加 gradle 文件:
dependencies {
def work_version = 2.0.0
// (Java only)
implementation "androidx.work:work-runtime:$work_version"
}