gpt4 book ai didi

android - android如何定时调用方法?

转载 作者:行者123 更新时间:2023-11-30 02:32:58 26 4
gpt4 key购买 nike

我如何在我的 android 应用程序中的特定时间调用特定方法

假设我必须在用户提供的固定时间调用 startService() 方法。只有在那个时候 startService() 方法才会自动执行。

不知道如何下手。优雅地向任何人建议我解决方案的方向。我的意思是我必须实现哪些功能。

最佳答案

您可以使用 AlarmManager 来完成。

方法示例:每 10 分钟唤醒一次 CPU,直到手机关机。

添加到 Manifest.xml:

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

<receiver android:process=":remote" android:name="Alarm"></receiver>

代码:

    package YourPackage;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.widget.Toast;

public class Alarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();

// Put here YOUR code.
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example

wl.release();
}

public void SetAlarm(Context context)
{
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute
}

public void CancelAlarm(Context context)
{
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}

从服务设置警报:

package YourPackage;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;

public class YourService extends Service
{
Alarm alarm = new Alarm();
public void onCreate()
{
super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
alarm.SetAlarm(YourService.this);
return START_STICKY;
}



public void onStart(Context context,Intent intent, int startId)
{
alarm.SetAlarm(context);
}

@Override
public IBinder onBind(Intent intent)
{
return null;
}
}

如果你想设置闹钟在手机开机时重复:

向 Manifest.xml 添加权限:

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

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

并创建新类:

package YourPackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AutoStart extends BroadcastReceiver
{
Alarm alarm = new Alarm();
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
alarm.SetAlarm(context);
}
}
}

关于android - android如何定时调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27040536/

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