gpt4 book ai didi

android - 工作重复 alarmmanager 不起作用,接收器不启动

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:15:08 24 4
gpt4 key购买 nike

public void schedule()
{
Long time = new GregorianCalendar().getTimeInMillis()+10*1000;
Intent intent = new Intent(getActivity(), AlarmReceiver.class);
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 10*1000, PendingIntent.getBroadcast(getActivity(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT));
}

上面这是我在 fragment 中的方法。也在 Activity 中尝试过。奇怪的是,这段代码适用于一个空的测试项目。我在这里看到的问题是最后一部分 alarmManager.setInexactRepeating() 根本没有启动 AlarmReceiver.class

我在这里做错了什么?

我的 list 文件:

    <receiver android:name=".AlarmReceiver"/> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

也是我的接收器:

public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context, "Alarm Triggered and SMS Sent", Toast.LENGTH_LONG).show();
}
}

最佳答案

因为 setInexactRepeating。使用 setRepeating,它会在正确的时间被处理。

代替:

setInexactRepeating 

使用

setRepeating

setInexactRepeating,对操作系统和电池友好,它将所有要在 Alarm receive 上完成的工作分批处理并一个接一个地工作,而 setRepeating 会立即触发警报

另请注意:一旦手机重新启动,警报就会消失,您可能必须实现启动广播接收器以使其持久存在。确保你不执行该运行时,你需要在 list 中实现它,否则当你的应用程序不在后台时你将不会收到任何广播。

一个小例子:

这是工作代码。它每 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();
}

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 - 工作重复 alarmmanager 不起作用,接收器不启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938507/

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