① android系统睡眠状态如何唤醒线程和广播
不能!
(不能手动唤醒,因为肯定需要点亮屏幕(手动点亮屏幕),所以并不是真睡眠状态)。
只能提前设置,比如闹钟,具体到“广播”即收音机,那么只建议使用第三方程序,如“蜻蜓FM”,就像闹钟可以定时自动开启。
如果是自己造,相当于重新编个程序出来,需要掌握大量专业性的东西,得不偿失
② 用Android studio做一个可以运行的小程序,闹钟也行,然后可以连到手机,感谢大神。
环境搭建就不讲了,直接说开发。
小闹钟程序开发中的要点就是:
1、时间选择对话框(TimePicker)
2、获取闹钟管理器并对其进行设置
3、注册广播接收器
掌握了这两点,写程序就很简单了。
1、新建android项目:Alarm,sdk版本选择2.2,Package name:com.lql.activity,Main Activity:Alarm
2、编写界面:直接修改layout中的main.xml文件,代码如下:
Xml代码
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
>
<Button
android:id="@+id/timeBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/time"
android:textSize="20sp"
/>
<Button
android:id="@+id/cancelAlarmBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cancelAlarm"
/>
</LinearLayout>
界面的效果如下:
{
/*(non-Javadoc)
*@seeandroid.content.BroadcastReceiver#onReceive(android.content.Context,android.content.Intent)
*/
@Override
publicvoidonReceive(Contextarg0,Intentdata){
Log.d(Alarm.TAG,"thetimeisup,startthealarm...");
Toast.makeText(arg0,"闹钟时间到了!",Toast.LENGTH_SHORT).show();
}
}
这个代码就很简单了,主要是要继 承BroadcastReceiver 这个类,然后重写onRecive方法。onRecive方法在闹钟的时间达到之后会执行,在这里我们可以做自己的事情,比如启动某个程序,或者播放铃声,我这里就是简单的提示一下,使用的是Toast。
5、在android的AndroidManifest.xml文件中注册广播接收器:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
Xml代码
package="com.ql.activity"
android:versionCode="1"
android:versionName="1.0">
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<receiverandroid:name=".AlarmReceiver"android:process=":remote"/>
<activityandroid:name=".Alarm"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-sdkandroid:minSdkVersion="8"/>
</manifest>
核心的配置为<receiver android:name=".AlarmReceiver" android:process=":remote" />,这也是闹钟程序的关键,如果不做这个配置,那么时间到了之后,闹钟将不会提示。
接下来就是到模拟器上测试,运行截图如上图。程序源代码见附件。
③ 手机怎么设置闹钟广播
要想在手机中设置闹钟还是非常简单的,只需要单击手机中的时间,就可以显示设置闹钟的选项。
④ android中闹钟程序是怎样监听系统时间的
是的 关机之后就不起作用,需要每次开机后重新设置下
⑤ android AlarmManager使用详解
AlarmManager是android中系统自带的一个提醒服务,比如设置闹钟,做一个定时任务,还可以设置重复操作
AlarmManager中常用的有三个方法:
1、set(int type,long startTime,PendingIntent pi),用于设置一次闹钟。
2、setRepeating(int type,long startTime,long intervalTime,PendingIntent pi),用于设置重复闹钟。
3、setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi),同样是用于设置重复闹钟,但是它是不准确的,相对于第二个方法,也更加节能。
下面就看看这些方法中的参数:
type为闹钟的类型,可分为四个常量:
ELAPSED_REALTIME:闹钟在睡眠状态下不可用,使用的是相对系统启动时间。
ELAPSED_REALTIME_WAKEUP:闹钟在睡眠状态下可用,使用的是相对系统启动时间。
RTC:闹钟在睡眠状态下不可用,使用的是真实时间。
RTC_WAKEUP:闹钟在睡眠状态下可用,使用的是真实时间。
startTime:为开始时间
intervalTime:为重复闹钟的间隔时间,内置了几种:
INTERVAL_FIFTEEN_MINUTES 15分钟
INTERVAL_HALF_HOUR 半个小时
INTERVAL_HOUR 一个小时
INTERVAL_HALF_DAY 半天
INTERVAL_DAY 一天
PendingIntent :广播的一个intent,我们用广播接受闹钟的定时任务,注册一个广播去接受,任务指令。
使用PendingIntent的getBroadcast (Context context, int requestCode, Intent intent, int flags)方法可以得到一个发送广播动作的PendingIntent对象
为以下4个常量或其他支持使用Intent.fillIn()来控制它的变量:
FLAG_CANCEL_CURRENT:如果描述的PendingIntent对象已经存在时,会先取消当前的PendingIntent对象再生成新的。
FLAG_NO_CREATE:如果描述的PendingIntent对象不存在,它会返回null而不是去创建它。
FLAG_ONE_SHOT:创建的PendingIntent对象只使用一次。
FLAG_UPDATE_CURRENT:如果描述的PendingIntent对象存在,则保留它,并将新的PendingIntent对象的数据替换进去。
另一个就是在manifest.xml中注册自己的广播
这样就可以实现定时任务了,如果要定时任务service启动还可以加上service
⑥ 基于android的闹钟如何添加和删除
一、本课题要求:设计一个基于Android的闹钟的软件。
实现的功能有:能通过界面设置闹钟的启动条件建立后台服务进程,当满足触发条件时,闹钟响应相应事件。
二、需求分析
该课题实现在手机操作系统Android闹钟提醒功能,携带方便,使用起来灵活、快捷、省心,是一款实用的手机软件。“手机闹钟”可以在后台运行,且能和普通闹钟一样设置多个位置闹铃,有良好的人机交互界面,可对其编辑、启用或禁用,关键在于可以自定义设置取消闹钟的操作。
(1)系统体系结构包括:添加闹铃、设置时间、重复等,闹铃提醒方式,返回首页。
(2)用户界面设计
解除闹铃代码
(2)代码分析
开发手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以在程序中设置某个应用程序在未来的某个时刻被执行。当AlarmManager定时时间到了之后,当初注册的Intent对象将会被系统广播,进而启动目标程序。注册的闹钟在设备睡眠的时候仍然会保留,可以选择性地设置是否唤醒设备,但是当设备关机和重启后,闹钟将会被清除。
在程序运行时当需要使用AlarmManager类时,可以通过Context对象的getSystemService(Context.ALARM_SERVICE)方法来获得AlarmManager对象。
闹钟使用的Demo:com.example.android.apis.app.AlarmController其中设定了两种闹钟,一种是一次性的,一种是重复的。
四、总结
在这个过程中,我学会了很多知识,比如Android环境的搭建和配置问题、Android的构架和基本组建等,同时我学会的最重要的一点是,要利用现有的资源去解决问题,在图书馆、在网络上寻找答案,也可以请教老师或与同学相互讨论。虽然,这个软件目前运行良好,但是我认为代码的健壮还很差,在整个工程的构思方面也不足,用户操作界面还不够灵活,这些问题还需要今后逐一解决。与此同时,这个软件还可以进一步扩展,例如通过Android Api获取位置信息,并在指定地点设置闹钟提醒等,使功能更加强大,带给用户更好的体验与便捷的生活服务。
⑦ 手机闹钟记录可以查吗,想知道闹钟都在什么时间响过
订闹钟的时候可以选择响铃日期和周期,但是不会有记录,所以不能查询。
根据闹钟的原理:不是轮询,在Android中,你添加一个闹钟之后,安卓自带的闹钟程序会将你创建的闹钟先放到自己的Content Provider中,并且找到最近一次将要触发的闹钟,将它注册到Android系统中。
在Android5.0以及之后,闹钟程序会将闹钟实例放在的AlarmManager中,这个AM就会帮你照顾好它,当时间到了该闹钟需要触发的时刻,系统便会发送一个广播,这个广播会携带这你之前注册的Intent,闹钟程序收到这个广播之后,就会启动一个后台Service,service就会根据intent的内容触发闹钟,进行响铃、震动等操作。
在5.0之前,会将最近的闹钟保存到系统的Setting维护的一个数据库中。
最后,安卓系统都会设置硬件RTC,时间一到便会触发。例如你关机之后,时间一到,便会触发系统启动,启动完成后系统会广播系统启动完成,闹钟程序收到广播后便会从数据库中读取之前保存的闹钟数据,进行触发。
但是是查不到记录的。
⑧ android闹钟实现,不响……
AlarmManager 的运行需要程序活着,比如在前台或者后台活着,你退出程序后还会有一个空进程在运行,时间到了就会响。
但是!但是!如果你在设置中“停止运行”了这个程序,或者使用360清理一类的清理内存的软件,或者某些软件有自动清理内存功能,或者有拦截自启动功能,或者内存低了,等等等等原因,导致你的程序没办法处于活动状态,那么AlarmManager就算到时间了也不会运行……
好的解决方法是在你的程序中写个广播接收器,接受多个广播,比如接受开机启动,网络发生变化,时区时间变化,等等广播,然后接受广播后拉起后台服务,这样你就能尽可能保证程序处于活动状态,并且要在360等权限管理软件中允许自启动。
望采纳
⑨ android中如何实现定时提醒
android中可以使用闹钟进行提醒,你只需要告知系统你想在什么时候被提醒,然后需要一个闹钟的广播接收器,当到你设置的时间时,系统会给你发送一条广播,当你接收到广播后你就可以做一些操作,比如启动你的app,或者跳转到你app中的任何一个界面。代码如下:
//发送闹钟请求
Intent intent = new Intent(mContext, AlarmReceiver.class);
intent.setAction("something");
intent.setType("something");
intent.setData(Uri.EMPTY);
intent.addCategory(“something”);
intent.setClass(context, AlarmReceiver.class);
// 以上给intent设置的四个属性是用来区分你发给系统的闹钟请求的,当你想取消掉之前发的闹钟请求,这四个属性,必须严格相等,所以你需要一些比较独特的属性,比如服务器返回给你的json中某些特定字段。
//当然intent中也可以放一些你要传递的消息。
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, alarmCount, intent, 0);
//alarmCount是你需要记录的闹钟数量,必须保证你所发的alarmCount不能相同,最后一个参数填0就可以。
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
//这样闹钟的请求就发送出去了。time是你要被提醒的时间,单位毫秒,注意不是时间差。第一个参数提醒的需求用我给出的就可以,感兴趣的朋友,可以去google一下,这方面的资料非常多,一共有种,看一下就知道区别了。
//取消闹钟请求
Intent intent = new Intent(mContext, AlarmReceiver.class);
intent.setAction("something");
intent.setType(something);
intent.setData(Uri.EMPTY);
intent.addCategory(something);
intent.setClass(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, alarmCount, intent, 0);
//alarmCount对应到你设定时的alarmCount,
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);
//接着,你需要一个广播接收的类:
public class AlarmReceiver extends BroadcastReceiver{
private NotificationManager manager;
@Override
public void onReceive(Context context, Intent intent) {
manager = (NotificationManager)context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
//例如这个id就是你传过来的
String id = intent.getStringExtra("id");
//MainActivity是你点击通知时想要跳转的Activity
Intent playIntent = new Intent(context, MainActivity.class);
playIntent.putExtra("id", id);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, playIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentTitle("title").setContentText("提醒内容").setSmallIcon(R.drawable.app_icon).setDefaults(Notification.DEFAULT_ALL).setContentIntent(pendingIntent).setAutoCancel(true).setSubText("二级text");
manager.notify(1, builder.build());
}
}