调用系统时钟android_android 调用rtc时钟 - CSDN
  • 今天遇到一个新的需求,要求点击一个按钮来设置时间,在网上找了好久的自定义的时间控件,发现效果并不...调用方法如下 btn.setOnClickListener(new OnClickListener() {    @Override  public void onClick(Vie

    今天遇到一个新的需求,要求点击一个按钮来设置时间,在网上找了好久的自定义的时间控件,发现效果并不理想,于是想到使用安卓原生的设置时间的控件。

    调用方法如下

    btn.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                final Calendar c = Calendar.getInstance();
                DatePickerDialog dialog = new DatePickerDialog(NewsPreferentialPayActivity.this, new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                            c.set(year, monthOfYear, dayOfMonth);
                            tv.setText(DateFormat.format("yyy-MM-dd", c));
                        }
                    }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
                    dialog.show();
                }

    这种方式能够很方便的出现一个时间选择的弹窗,而不用再单独写一个dialog、xml配置文件

    展开全文
  • package com.lsd.CallSystemClock; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.ComponentName;...import android.content.Intent;...import android.c


    package com.lsd.CallSystemClock;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class CallSystemClockActivity extends Activity {
    	private final static int SET = 1;// 线程操作标记
            private Button callSystemClock;
            private List<PackageInfo> allPackageInfos; // 取得系统安装所有软件信息
    	private List<PackageInfo> userPackageInfos;// 取得自己安装的软件信息
    	private List<PackageInfo> sysPackageInfos;// 取得系统安装的软件信息
    	
    	private Handler mHandler = new Handler() {
    		@Override
    		public void handleMessage(Message msg) {
    			switch (msg.what) {
    			case SET:
    				 Toast.makeText(CallSystemClockActivity.this, "程序加载完成", Toast.LENGTH_SHORT).show();
    				break;
    			}
    		}
    	};
    	
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            new Thread(new SeachThread()).start();// 启动线程加载安装程序
            
            callSystemClock = (Button) super.findViewById(R.id.callSystemClock);
            callSystemClock.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				call();//跳转
    				
    			}
    		});
        }
        
        
        
        private void call(){
        	String activityName = "";//activity名
    		String packageName = "";// 得到程序包名
    		String clockPackageName = "";// 闹钟包名
    		for (int i = 0; i < sysPackageInfos.size(); i++) {
    			PackageInfo packageInfo = sysPackageInfos.get(i);// 循环取出系统程序
    			packageName = packageInfo.packageName;
    			if (packageName.indexOf("clock") != -1) {
    				if (!(packageName.indexOf("widget") != -1)) {
    					// 找到系统闹钟了
    					ActivityInfo activityInfo = packageInfo.activities[0];// 取出activity信息
    					activityName = activityInfo.name;// 取出activity名字
    					clockPackageName = packageName;
    				}
    			}
    		}
    		if((activityName != "") && (clockPackageName != "")){
    			Intent intent = new Intent();
    			intent.setComponent(new ComponentName(clockPackageName, activityName));
    			startActivity(intent);
    		}else{
    			Toast.makeText(this, "启动闹钟失败!", Toast.LENGTH_SHORT).show();
    		}
        }
        
        
     // ***************--------*异步线程加载加载安装程序*--------------*******************//
     	private class SeachThread extends Thread {
     		@Override
     		public void run() {
     			allPackageInfos = getPackageManager().getInstalledPackages(
     					PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_ACTIVITIES); // 取得系统安装所有软件信息
     			userPackageInfos = new ArrayList<PackageInfo>();// 定义用户安装软件信息包
     			sysPackageInfos = new ArrayList<PackageInfo>();// 定义系统安装软件信息包
    
     			for (int i = 0; i < allPackageInfos.size(); i++) {// 循环取出所有软件信息
     				PackageInfo temp = allPackageInfos.get(i);
     				ApplicationInfo appInfo = temp.applicationInfo;// 得到每个软件信息
     				if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0
     						|| (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
     					sysPackageInfos.add(temp);// 系统软件
     				} else {
     					userPackageInfos.add(temp);// 是用户自己安装软件
     				}
     			}
     			Message msg = new Message();// 查询完成,发送新消息
     			msg.what = SET;// 操作标记
     			mHandler.sendMessage(msg);
     		}
     	};
    }





    展开全文
  • 这是一个实时显示时钟的应用。 主要点:①如何用方法将数字的每一位拆开;②思考哪些部分是需要循环执行的;③使用了计时器Timer类和Handler类。

    这是一个实时显示时钟的应用。
    主要点:①如何用方法将数字的每一位拆开;②思考哪些部分是需要循环执行的;③使用了计时器Timer类和Handler类。
    实时时钟主要是思路是。获取系统的时间,然后将这个时间拆开来,分别获取每个数字的每一位,例如15时,就将他拆开得到数字1和数字5,然后将这两个数字传递给setImageResource这个方法,来显示图片。在这个过程中我们不断地显示获取系统的时间,然后拆开数字,再传递给setImageResource这个方法。这是个循环的动作,并且需要不停的进行,并且不能停止。这个可以通过计时器来做。拆开数字的方法:取十位数采用整除的方法,例如15/10 = 1。取个位数字采用取余的方法15%10=5。这样就得到了每个数字的每一位。

    首先我们需要0-9的数字图片用来显示。
    在xml文件下里创建八个ImageView,用来显示时钟,冒号,分钟,冒号,秒钟即HH: MM: SS的格式。
    在创建这些ImageView时建议一个一个的创建,每创建一个并改掉ID名称,否则在后期重新调节界面布局时需要重新命名ID,显示图片变乱。
    创建每个ImageView类的对象,然后找到这个ImageView对象的所对应的界面上的某一个ImageView,即用findViewById方法。
    然后用setImageResource方法设置IImageView显示所要显示的图片。

    以下为java代码部分

    package com.example.timehhmmss;
    
    import java.util.Calendar;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity 
    {   
        ImageView imageView_hour_left;
        ImageView imageView_hour_right;
        ImageView imageView_minute_left;
        ImageView imageView_minute_right;
        ImageView imageView_second_left;
        ImageView imageView_second_right;
        Timer timer = new Timer();
        Handler handle = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                  androidOsTime = Calendar.getInstance();
                  int hour = androidOsTime.get(Calendar.HOUR_OF_DAY);
                  int minute =  androidOsTime.get(Calendar.MINUTE);
                  int second =  androidOsTime.get(Calendar.SECOND);
                  int hour_left = hour/10;
                  int hour_right = hour%10;
                  int minute_left = minute/10;
                  int minute_right = minute%10;
                  int second_left = second/10;
                  int second_right = second%10; 
                  //拆开小时左边的数字和右边的数字,即个位数字和十位数字。其他的依次是分钟,秒钟
    
                imageView_hour_left.setImageResource(images[hour_left]);
                imageView_hour_right.setImageResource(images[hour_right]);
                imageView_minute_left.setImageResource(images[minute_left]);
                imageView_minute_right.setImageResource(images[minute_right]);
                imageView_second_left.setImageResource(images[second_left]);
                imageView_second_right.setImageResource(images[second_right]);
            }   
        };
        Calendar androidOsTime;
    
        int[] images ={ R.drawable.number_0,  R.drawable.number_1,                      R.drawable.number_2, R.drawable.number_3, R.drawable.number_4,                       R.drawable.number_5, R.drawable.number_6,R.drawable.number_7, 
    R.drawable.number_8, R.drawable.number_9,
                       };
    /*  这些代码放在这个地方时错误的,因为这个时间是不断改变的,
     *   我们不断地从系统中获取时间,
     *这段代码需要不断循环,因此这段时间需要放在循环里面。这里是不断地获取系统时间        
     *并且拆开系统时间数字
     */
    //    int hour = androidOsTime.get(Calendar.HOUR_OF_DAY);
    //      int minute =  androidOsTime.get(Calendar.MINUTE);
    //      int second =  androidOsTime.get(Calendar.SECOND);       
    //      int hour_left = hour/10;
    //      int hour_right = hour%10;   
    //      int minute_left = minute/10;                                
    //      int minute_right = minute%10;                               
    //      int second_left = second/10;                                
    //      int second_right = second%10;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            imageView_hour_left = (ImageView)findViewById(R.id.imageView_hour_left);
            imageView_hour_right = (ImageView)findViewById(R.id.imageView_hour_right);
            imageView_minute_left = (ImageView)findViewById(R.id.imageView_minute_left);
            imageView_minute_right = (ImageView)findViewById(R.id.imageView_minute_right);
            imageView_second_left= (ImageView)findViewById(R.id.imageView_second_left);
            imageView_second_right= (ImageView)findViewById(R.id.imageView_second_right);
    /*  这些代码放在这个地方时错误的,因为这个时间是不断改变的,
     *   我们不断地从系统中获取时间,
     *这段代码需要不断循环,因此这段时间需要放在循环里面。这里是不断地切换图片的
     */
    //        androidOsTime.setToNow(); 
    //        imageView_hour_left.setImageResource(images[hour_left]);
    //        imageView_hour_right.setImageResource(images[hour_right]);
    //        imageView_minute_left.setImageResource(images[minute_left]);
    //        imageView_minute_right.setImageResource(images[minute_right]);
    //        imageView_second_left.setImageResource(images[second_left]);
    //        imageView_second_right.setImageResource(images[second_right]);
    /*这里就是一个循环,不断地执行获取时间,拆解数字,传递参数,显示图片的任                       
    *务,只不过这里是用计时器来做这个重复的动作,如果使用for语句不会永远持续下去,
    *因为中间的判断次数是有限的 
    */
        timer.schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                handle.sendMessage(new Message());
            }
        }, 0,1000);
        }
    }

    以下时xml文件,即布局文件部分

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.timehhmmss.MainActivity" 
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        >
    
        <ImageView
            android:id="@+id/imageView_hour_left"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:src="@drawable/ic_launcher" />
        <ImageView
            android:id="@+id/imageView_hour_right"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="16dp"
            android:layout_toRightOf="@+id/imageView_hour_left"
            android:src="@drawable/ic_launcher" />
    
        <ImageView
            android:id="@+id/imageView_minute_left"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="34dp"
            android:layout_toRightOf="@+id/imageView_colon1"
            android:src="@drawable/ic_launcher" />
    
        <ImageView
            android:id="@+id/imageView_minute_right"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/imageView_minute_left"
            android:src="@drawable/ic_launcher" />
    
        <ImageView
            android:id="@+id/imageView_second_left"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/imageView_second_right"
            android:src="@drawable/ic_launcher" />
    
        <ImageView
            android:id="@+id/imageView_second_right"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/ic_launcher" />
    
        <ImageView
            android:id="@+id/imageView_colon1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="39dp"
            android:layout_toRightOf="@+id/imageView_hour_right"
            android:src="@drawable/time_colon" />
    
        <ImageView
            android:id="@+id/imageView_colon2"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_centerVertical="true"
            android:layout_marginRight="73dp"
            android:layout_toLeftOf="@+id/imageView_second_left"
            android:src="@drawable/time_colon" />
    
    </RelativeLayout>
    

    这里是最终效果图。
    这里写图片描述

    展开全文
  • 不积跬步,无以至千里。   一、时钟整体看 注册表信息: 权限调用:  开机启动的广播 RECEIVE_BOOT_COMPLETED  屏幕保持唤醒 WAKE_LOCK  手机震动 VIBRATE  修改全局系统设置 ...

    不积跬步,无以至千里。

     

    一、时钟整体看

    注册表信息:

    权限调用:

            开机启动的广播              RECEIVE_BOOT_COMPLETED

            屏幕保持唤醒                WAKE_LOCK

            手机震动                    VIBRATE

            修改全局系统设置            WRITE_SETTING

            禁用键盘锁                  DISABLE_KEYGUARD

            读写手机状态和身份          READ_PHONE_STATE

            允许访问底层电源管理        DEVICE_POWER

            读写外存储                  READ_EXTERNAL_STORAGE

    <application/>中用到了android:uiOptions=”splitActionBarWhenNarrow”为屏幕较小分配较好的空间

     

    时钟整体的设计:

    ActionBar+ViewPager+Fragment

    入口类DeskClock(不全面)

    Activity生命周期来说:

    onCreate:

    1、 利用了Action判断显示到哪个Tab中,默认为时间界面

    2、 InitViews方法对控件的初始化

    3、 TabAdapter为适配器,其中ActionBar有一个AddTab(动态增加Tab方法)

    4、 SetHomeTimeZone方法:

    onPrepareOptionsMenu动态添加选项菜单:每点击一下去刷新一下菜单,本身有设置(夜间、帮助被隐藏了)——个人项目需求

     

    摘要:

    Android系统闹钟定时功能框架,总体来说就是用数据库存储定时数据,有一个状态管理器这些定时状态的触发和更新都交给它来处理,他就像电脑的CPU、人的大脑。像闹钟这种应用程序,每天重复定时,或者一周选择其中几天,闹钟响了5分钟后,再次响铃,这时候就需要一种好的办法来管理这些数据和状态,下面就来分析一下Android系统闹钟的具体实现。

    二、时钟之闹钟

     

    1、 基本结构

    Alarm代表一条定时数据

    AlarmInstance代表一条定时项目的实例,一个AlarmInstance对应一个alarm但比Alarm多了更多的状态信息

    AlarmStateManager状态管理器,对定时项目进行调度,添加、删除、更改状态,是一个广播类,定时到点后发广播到这里,进行下一步处理。

    AlarmService响应结果,也就是定时到达后要做的事,响铃、停止铃声

    ClockDataHelper里面创建了三个表,ALARMS_TABLE,INSTANCE_TABLE,CITIES_TABLE前两个分别对应上面的Alarm和AlarmInstance

    ClockDataHelper类中的三个表:Alarm表、AlarmInstance表、Cityies表

     

    代码示例:

     

                                 本地数据库创建的Alarms表

    代码示例:

     

                                 本地数据库创建的Alarminstance表

    代码示例:

                                 本地数据库创建的Cities表

     

     

    这里说一下几个特殊的字段,对Alarm表,DAYS_OF_WEEK表示一周内需要定时的天(闹钟有一个功能就是选择一周的几天,这里是int值,用位来表示设置的天数,而provider包下有个专门的类Daysofweek来存储和处理

    AlarmInstance表中一个Alarm_IO,关联到一个Alarm,可以看到在AlarmInstance表里也有时间,其中这两个时间是不一样的,Alarm表示原始的定时,一个不变的数据,而AlarmInstance则代表了一个使用中的定时项目,或者是一个随时间变化的数据。它的时间是变化的,比如闹钟响了以后延时10分钟,再响就需要改变这里的时间,而基础数据不能变,还需要显示在那里。Alarm_state代表了当前定时项目的状态,具体都是由AlarmStateManager来管理的

     

    要想了解闹钟呢,就要先了解这几个类

    1、 Alarm类

    这个类是Alarm信息对于数据库的增删改查操作

    还有一个就是创建AlarmInstance方法

     

     

     

    AlarmInstance类和alarm类一样,他也有对于数据库的增删改查等操作、因为其时间上是动态的因此多了set、get方法

     

     

     

    时间上的处理方法:

    设置:

    获取:

    闹钟的几种状态

    SILENT_STATE,alarm被激活,但是不需要显示任何东西,下一个状态LOW_NOTIFICATION_STATE;

    LOW_NOTIFICATION_STATE,这个状态表示alarm离触发的时间不远了,时间差AlarmInstance.LOW_NOTIFICATION_HOUR_OFFSET=-2,也就是2个小时。下一个状态会进入HIGH_NOTIFICATION_STATE,HIDE_NOTIFICATION_STATE,DISMISS_STATE;

    HIDE_NOTIFICATION_STATE,这是一个暂时态,表示用户想隐藏掉通知,这个状态会一直持续到HIGH_NOTIFICATION_STATE;

    HIGH_NOTIFICATION_STATE,这个状态和LOW_NOTIFICATION_STATE相似,但不允许用户隐藏通知,负责触发FIRED_STATE或者DISMISS_STATE;它的触发时间为30分钟之前

    SNOOZED_STATE,像HIGH_NOTIFICATION_STATE,但是会增加一点定时的时间来完成延迟功能;

    FIRED_STATE,表示响铃状态,会启动AlarmService直到用户将其变为SNOOZED_STATE或者DISMISS_STATE,如果用户放任不管,会之后进入MISSED_STATE;

    MISSED_STATE,这个状态在FIRED_STATE之后,会在通知栏给出一个提醒刚才响铃了;

    DISMISS_STATE,这个状态表示定时结束了,会根据定时项目的设置判断是否需要重复,从而决定要删除这个项目还是继续设定一个新的定时。

     

     

    界面分析

    AlarmClockFragment的界面功能分析(从生命周期上分析)

     

    1、OnCreateView

    解析Fragment

    从Bundle中获取数据:传递了几个参数

    startCreatingAlarm方法:创建一个TimePickerDialog,设置闹钟时间,创建一个Alarm实体对象,根据RingtoneManager铃声管理对象获得一个默认铃声的uri,并对Alarm对象进行属性设置

    1、 OnResume方法

    1、 检查是否有别的app是否有请求到这,去创建一个闹钟,然后清空这个intent

    2、 是否从deskclock界面滚到alarm假面的(更新到最新的数据界面)

    3、  OnDestroy

        对于对创建的ToastMaster.cancelToast()将Toast置空

    onActivityResult:

    对在另一个Activity中获取的铃声uri进行设置显示,并把这个铃声设置成默认铃声

    bindView方法(Adapter的方法)

    1、利用持有者优化、以及对于tag的判空对ListView的优化

      2、expandAlarm对于item中扩展方法

      3、以及对其中控件重复的处理

          对这重复中的处理两种方式 1、对存储状态的获取,然后进行设置

                                    2、对其中重复中的控件的监听方法的设置

                                    3、对于扩展与收缩的动画的处理

                                    4、对其中注册了一个监听视图树的观察者模式

     

    创建一个闹钟的步骤

     

     

    1、 AlarmClockFragment中的onCreateView方法

     

    2、 AlarmClockFragment中的startCreatingAlarm()

     

    3、 AlarmClockFragment中的asyncAddAlarm(a)

     

    4、 AlarmClockFragment中的setupAlarmInstance方法

     

    5、AlarmStateManager的registerInstance()

    因为其中要对Alarminstance中State状态判断,但是还没有状态就进入到了else中

     

     

    5、 AlarmStateManager的setSilentState方法

     这里就是AlarmStateManager对这些状态的处理要,同时会规划一个定时转换成下一个状态。

     

    从这可以看出这个状态将要由silentState——》Low_NoTIFICATION_State,而这个状态是从AlarmInstance中得到的可见为AlarmInstance.getLowNoticationTime()得到的;

     

    6、 AlarmStateManager的scheduleInstanceStateChange方法

    更新AlarmInstance的状态 信息,通过此方法规定下一个状态

     

    在createStateChangeIntent方法中设置了intent中的state属性为Low_NOTIFICATION,并传递了两个属性用户onReceive中的处理属性为:ALARM_GLOBAL_ID_EXTRA、ALARM_STATE_EXTRA

     

    7、 AlarmStateManager的onReceiver方法

    其为了来接收规划好的推迟Intent的广播,LOW_NOTIFICATION_HOUR_OFFSET值为-2,其在前面可以看出将要在闹钟响之前的前两个小时就会发出这个延迟的广播意图,然后AlarmStateManager将会把这个状态改变为下一个状态

     

    其处理方法在HandleIntent方法中,经过处理将要转移到setAlarmState方法中

     

     

     

    8、 AlarmStateManager的setAlarmState方法

     

     

    9、对于每一个state将转移到相应的setXXXXState方法中,完成下一次状态的转换形成一个定时的循环,直到到达DiSSMISSED_STATE里停用或者删除定时的item,如果需要重复则会获取到下一次的定的时间

    例如以下是:由Slience_STATE状态变为了LOW_NOTIFICATION状态,他将要进行下次的规划变为HIGH_NOTIFICATION状态,并且调用setLowNotificationState方法,具体看下面

     

    其中的AlarmNotification.showLowPriorityNotification方法,将会在通知栏上创建一个通知,并为此通知设置了一个监测用户移除次通知Notification的事件

     

    接下来就如所说,就是进入定时的循环。

    如上,都是类同的,下面看一下FIRED_STATE:

    开启了AlarmService,

     

    就来到了AlarmService.startAlarm方法

     

    查看onCommand方法,就会进入startAlarm方法

     

    然后进入startAlarm方法中,就会进入到AlarmNotification.showAlarmNotification(this,mCurrentAlarm);

     

    接下来就会进入到Notification中的showAlarmNotification方法,接下里就会看到睡眠的这个意图

     

    同样下面还有一个消失的意图,还有设置满屏

     

    1、当用户按了睡眠时,将会睡眠几分钟,关闭闹铃铃声和振动,将会设置新的闹钟时间,即为:现在时间+睡眠时间(设置那存储的Prefrence中取出),更新数据库中的AlarmInstance,并发送通知和下次的FIRED_STATE

    2、用户直接关闭的话,就会进入到DisMiss_STATE状态将会执行unregisterInstance方法(下面介绍)和删除这个AlarmInstance和并根据用户是否设置重复更新下一个闹钟

     

    Unregisterinstance方法,关闭铃声和振动等、移除所有和这个AlarmInstance有关的的计时器和通知,下图为其方法

     

    3、用户如果不去管闹钟的如下图,会在Preference中获取到timeout的时间,然后去规范推迟意图成为Miss状态

     

    这里为获取timeout的时间

     

    查看SetMissState方法,将会停止闹钟服务,更新AlarmInstance的实例在数据库,发送通知,并规划推迟意图成为DIsMiss_STATE

     

    同样会停止AlarmService的服务,并且会更新数据库中AlarmInstance的状态,并会发送Miss通知,

    规划下一DissMissed的意图,并根据用户是否设置重复更新下一个闹钟。

     

    小想法:闹钟声音设计,可以设计一个方法,让闹钟随着时间改变音量逐渐声音变大,叫醒沉睡者!

     

    代码URL=http://download.csdn.net/download/wdyshowtime/9966509

    观赏也是种力量,谢谢您的观看。吐舌头

     

     

     

     

     

    展开全文
  • RTC(Real-TimeClock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去。本文以飞凌嵌入式的OK4418-C为例,介绍在Android实时时钟框架。 整体流程介绍 ...
  • Android 时钟控件类

    2019-06-02 21:54:06
    新建一个 AlarmClockView类...import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import...
  • 我们在软件开发中有时候会用到钟表等控件来显示当前时间,同样地,在手机开发中也一样,在Android开发的SDK中,为我们提供一个方便的钟表控件使用方法,让我们无需做任何硬编码就可在手机界面中显示时钟状的钟表UI...
  • Android项目杰尼杰尼(极简番茄工作法)的学习准备之Android时钟Android时钟需求分析绘制过程其他步骤实现过程1.绘制时钟的圆形和刻度总结:2.绘制特殊时刻(12点、3点、6点、9点)的数字总结:绘制指针指针时针总结...
  • 前段时间我一个朋友在面试回来问我:那个公司要5天之...有了问题,自然要琢磨怎么解决,如果接触的知识面不够,或者没有系统的学习Android API,例如不知道AlarmManager,自然是不知道如何启动定时任务的,当时我也不知
  • 1. 系统调用过程简述 图1-1 系统调用过程图 探究系统调用过程,以ioctl为例,通俗来说,其实就是探究操作系统实现应用程序的ioctl对应上特定驱动程序的ioctl的过程。由于应用程序的ioctl处于用户空间,驱动程序的...
  • 最近项目里面要加一个添加闹铃的功能,设置胰岛素注射提醒,自定义闹钟实现起来有很多细节,而且安卓现在对系统功能的日益限制,对非系统后台服务的管控,很难实现非常完美的自定义闹铃。 so。干脆跳转到系统闹铃...
  • Android自定义时钟控件

    2017-07-19 18:16:31
    项目要求访问网络是等待状态要做时钟的样子,经过不懈努力,终于写出来了,现分享出来,功能比较全,直接拷贝代码就可以用,仅供有这种需求的码农们参考,如果采纳,请点个赞,谢谢支持。 效果图 主...
  • android系统裁剪优化

    2018-07-10 10:25:08
    android系统裁剪优化一直是各个厂商定制产品的关键步骤,包括浅层次的去除不必要的apk(android apk裁剪定制 )和深层次的裁剪整个编译系统和框架层. android作为开源系统,各个产品同质化严重,只有深层次的裁剪定制...
  • 作者:zjw-swun博客:https://juejin.im/user/58994f1d128fe1006cbfe0da声明:本文由作者zjw-swun授权发布,未...
  • 1.创建ClockView   public class ClockView extends View { public ClockView(Context context) { super(context); init(); } ... public ClockView(Context context, @Nullable Attribut
  • Android调用OpenGL绘制曲线入门手册 Android OpenGL ES2.0 JNI Cmake简介:该手册内容仅作为Android调用OpenGL实现绘制曲线图的入门手册,深入学习请参考手册推荐书籍。本手册针对采用jni接口实现java调用C++...
  • step1:新建项目DigtalClockWidget,并将显示时间的图片导入到drawable文件夹目录下:    各个图片如下:
  • 1.从google搜索内容 Intent intent = new Intent(); intent.setAction(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY,”searchString”) startActivity(intent);...Uri uri = Uri.parse(“h
  • Android系统闹钟定时功能
  • Android自定义控件之自定义时钟这个是我从别的开源项目中挖出来的,真心写的很不错,然后继续下来以便不时之需,直接上代码:WatcherBoard.java这个是自定义的时钟类package cn.xiayiye.custormtext; import ...
1 2 3 4 5 ... 20
收藏数 9,308
精华内容 3,723
关键字:

调用系统时钟android