当前位置: 首页 > 面试题库 >

Java-Alarm Manager Example

陶高扬
2023-03-14
问题内容

我想在我的项目中实现计划功能。所以我用Google搜索了一个警报管理器程序,但是找不到任何示例。

有人可以通过基本的警报管理器程序帮助我吗?


问题答案:

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

   @Override        
   public void onStart(Intent intent, int startId)
    {
        alarm.setAlarm(this);
    }

    @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>
...
<service
        android:name=".YourService"
        android:enabled="true"
        android:process=":your_service" >
</service>

并创建一个新类:

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(Intent.ACTION_BOOT_COMPLETED))
        {
            alarm.setAlarm(context);
        }
    }
}


 类似资料:
  • 在完成一个模块后,应该从那几个方面对代码进行优化,有哪些方法可以进行优化

  • 我想知道是否可以(以及使用哪种工具)在Java中执行类型安全i18n。可能还不清楚,所以这里有一些细节,假设我们使用基于的东西 1)使用类型安全参数进行转换 我希望避免像这样的接口,其中的值是非类型化的。应该不可能使用错误的参数类型进行调用。 注我可以指定所有键的类型。我正在寻找的解决方案应该是可伸缩的,并且不应该显著增加后端启动时间。 2)应该在编译时知道哪些键还在使用 我不希望我的翻译键库像许

  • 我们已经知道,Clojure代码最终在Java虚拟环境中运行。 因此,只有Clojure能够利用Java的所有功能才有意义。 在本章中,我们将讨论Clojure和Java之间的关联。 调用Java方法 可以使用点表示法调用Java方法。 一个例子是字符串。 由于Clojure中的所有字符串都是Java字符串,因此可以在字符串上调用普通的Java方法。 有关如何完成此操作的示例,请参见以下程序。 例

  • 问题内容: 我正在学习Spring 3,但似乎并没有掌握背后的功能。 从我读过他们似乎处理不同的注解(等等V,,等),而且从我读过他们注册相同什么bean后置处理器类。 为了更迷惑我,还有一个 属性上。 有人可以阐明这些标签吗?有什么相似之处,有什么不同之处,一个被另一个取代,它们彼此完成,我是否需要其中一个? 问题答案: 用于激活已经在应用程序上下文中注册的bean中的注释(无论它们是使用XML

  • 我在从使用SpringBoot和Faign构建的Java应用程序连接外部API时遇到问题。应用程序部署到docker容器中的VM。我正在尝试访问外部服务endpoint来检索一些数据,但到目前为止运气不佳。 我已经从VM命令行和docker容器内部也从命令行执行了相同的curl命令,但是当试图从java代码中命中它时,我只是收到一个超时。 任何关于可能发生的事情的想法,显然hosts文件和代理都是

  • 我正在使用BlueJ在java中开发一个虽然循环,但是 int m=0;int-ssum=0;

  • java.* 属性 表示 java.* 包层级的 JavaPackage 语法: java 说明: 在包含了 LiveConnect 或其他用于脚本化 Java 的技术的 JavaScript 实现中,全局 java 属性就是一个 JavaPackage 对象,它表示 java. 包层级。这个属性的存在意味着像 java.util 这样的一个 JavaScript 表示式引用的是 java.

  • java java 格式的 chaincode。