Android 编程之天气预报闹钟启动服务设置界面加载--4

真个application讲的已经差不多了,在说完这一篇之后,我会上传源码到资源,喜欢的可以下载和学习,今天主讲闹钟启动设置,设置页面的加载

在Android系统中,闹钟和唤醒功能都是由Alarm Manager Service控制并管理的。我们所熟悉的RTC闹钟以及定时器都和它有莫大的关系。为了便于称呼,我常常也把这个service简称为ALMS。

        另外,ALMS还提供了一个AlarmManager辅助类。在实际的代码中,应用程序一般都是通过这个辅助类来和ALMS打交道的。就代码而言,辅助类只不过是把一些逻辑语义传递给ALMS服务端而已,具体怎么做则完全要看ALMS的实现代码了。

        ALMS的实现代码并不算太复杂,主要只是在管理“逻辑闹钟”。它把逻辑闹钟分成几个大类,分别记录在不同的列表中。然后ALMS会在一个专门的线程中循环等待闹钟的激发,一旦时机到了,就“回调”逻辑闹钟对应的动作,俗称定时器

在我们的application中,extends BroadcastReceiver 我是继承了广播服务,创建了一个闹钟定时服务,sharedPreferences.getString("op", "5 * 60 * 1000") 以首选项的形式存储了间隔时间段,5*60*1000 即5分钟

清单注册广播服务:

        <receiver android:name="com.newer.myweather.BootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

清单注册设置活动界面:

<activity android:name="com.newer.myweather.SettingsActivity" >
        </activity>

设置界面加载布局文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="分类一" >
        <CheckBoxPreference
            android:key="net"
            android:summaryOff="关闭"
            android:summaryOn="开启"
            android:title="通知" />

        <EditTextPreference
            android:dependency="net"
            android:dialogTitle="配置通知"
            android:key="WIFI"
            android:negativeButtonText="取消"
            android:positiveButtonText="确定"
            android:title="通知设置" />
    </PreferenceCategory>
    <PreferenceCategory android:title="分类二" >
        <ListPreference
            android:dialogTitle="设置更新时间"
            android:entries="@array/op"
            android:entryValues="@array/op_value"
            android:key="op"
            android:negativeButtonText="取消"
            android:title="更新时间" />

        <MultiSelectListPreference
            android:dialogTitle="支持的系统"
            android:entries="@array/os"
            android:entryValues="@array/os"
            android:key="os"
            android:negativeButtonText="取消"
            android:positiveButtonText="确定"
            android:title="支持的系统" />
    <SwitchPreference android:title="显示模式" android:key="switch" android:switchTextOn="开" android:switchTextOff="关" android:summaryOff="白天" android:summaryOn="夜间"/>
    <PreferenceScreen android:title="传感器设置" android:summary="GPS、重力传感器、方向传感器">
        <CheckBoxPreference android:key="gps" android:title="GPS" android:summaryOn="开启" android:summaryOff="关闭"/>
        <Preference android:title="重力传感器"/>
    </PreferenceScreen>
</PreferenceCategory>

</PreferenceScreen>

设置活动代码:

package com.newer.myweather;
/**
 * 设置活动
 * @author Engineer-Jsp
 * @date 2014.10.27
 * */
import android.os.Bundle;
import android.preference.PreferenceActivity;

public class SettingsActivity extends PreferenceActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.settings);
	}

}

定时闹钟代码:

package com.newer.myweather;
/**
 * 定时闹钟
 * @author Engineer-Jsp
 * @date 2014.10.27
 * */
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;

public class BootReceiver extends BroadcastReceiver {

	private static final String TAG = "BootReceiver-XXXXXXXXXX";

	@Override
	public void onReceive(Context context, Intent intent) {

		AlarmManager alarmManager = (AlarmManager) context
				.getSystemService(Context.ALARM_SERVICE);

		PendingIntent operation = PendingIntent.getService(context, 0,
				new Intent(context, WeatherService.class),
				PendingIntent.FLAG_UPDATE_CURRENT);

		SharedPreferences sharedPreferences = PreferenceManager
				.getDefaultSharedPreferences(context);
		String op = sharedPreferences.getString("op", "5 * 60 * 1000");
		Log.d(TAG, "SharedPreferences-op" + op);
		long time = Long.parseLong(op) * 60 * 1000;
		alarmManager.setRepeating(AlarmManager.RTC, 0, time, operation);
		Log.d(TAG, "SharedPreferences-time" + time);

		// alarmManager.cancel(operation);

	}

}

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.newer.myweather"
    android:versionCode="1"
    android:versionName="1.0.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <!-- GPS 、网络 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_action_name"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo" >
        <activity
            android:name="com.newer.myweather.SplashActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Holo.Light" >
            <!-- @android:style/Theme.NoTitleBar -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="com.newer.myweather.WeatherService" >
        </service>

        <receiver android:name="com.newer.myweather.BootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name="com.newer.myweather.SettingsActivity" >
        </activity>
        <activity android:name="com.newer.myweather.LocationActivity" >
        </activity>
        <activity android:name="com.newer.myweather.MainActivity" >
        </activity>
    </application>

</manifest>

程序结构:

布局结构组成图:

源码下载地址:http://download.csdn.net/detail/jspping/8085313

时间: 2024-12-14 07:31:05

Android 编程之天气预报闹钟启动服务设置界面加载--4的相关文章

Android App 启动时显示正在加载图片(源码)

微信.QQ.天天动听等程序,在打开时显示了一张图片,然后跳转到相关界面.本文实现这个功能,其实很简单.... 新建两个Activity,LoadingActivity,MainActivity,将LoadingActivity设置为android.intent.action.MAIN.使用TimerTesk,或者Thread将LoadingActivity显示几秒后跳转到MainActivity界面. LoadingActivity: new Timer().schedule(new Timer

Android:布局实例之常见用户设置界面

实现效果: 整理思路: 1.控件:文字TextView 和 右箭头ImageView 2.因为考虑到点击效果,设计为:最外层为全圆角,内层有四种情况,分别为上圆角.无圆角.下圆角和全圆角. 3.内层样式效果:需要初始样式.和点击样式 4.需要知识:结合style.shake.selector组合样式 布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android=

android源码解析(二十一)--&gt;PopupWindow加载绘制流程

在前面的几篇文章中我们分析了Activity与Dialog的加载绘制流程,取消绘制流程,相信大家对Android系统的窗口绘制机制有了一个感性的认识了,这篇文章我们将继续分析一下PopupWindow加载绘制流程. 在分析PopupWindow之前,我们将首先说一下什么是PopupWindow?理解一个类最好的方式就是看一下这个类的定义,这里我们摘要了一下Android系统中PopupWindow的类的说明: A popup window that can be used to display

android源码解析(十七)--&gt;Activity布局加载流程

好吧,终于要开始讲讲Activity的布局加载流程了,大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与android中另外一个很重要的组件Service最大的不同,但是这个展示的界面的功能是Activity直接控制的么?界面的布局文件是如何加载到内存并被Activity管理的?android中的View是一个怎样的概念?加载到内存中的布局文件是如何绘制出来的? 要想回答这些问题,我们就需要对android的界面加载与绘制流程有所了解,这里我们先来学习一下Act

selenium启动Chrome时,加载用户配置文件

selenium启动Chrome时,加载用户配置文件 Selenium操作浏览器是不加载任何配置的,网上找了半天,关于Firefox加载配置的多点,Chrome资料很少,下面是关于加载Chrome配置的方法: 一.加载所有Chrome配置 用Chrome地址栏输入chrome://version/,查看自己的“个人资料路径”,然后在浏览器启动时,调用这个配置文件,代码如下: #coding=utf-8 from selenium import webdriver option = webdriv

spring启动component-scan类扫描加载过程---源码分析

有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring开始,中途会穿插自己通过newClassPathXmlApplicationContext 的区别和联系.

遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析

开发的机器,系统情况如下: 1.server 2003 sp2 x86 2.补丁安装360 3.升级到IE8 因为担心server 2003 sp2 不能够自动update,最近都是用360打补丁,比较快,但是问题很多,首先是.NET 2.0 SP2的更新会引起IIS6.0 的崩溃,然后就是SQL SERVER 2005 MANAGEMENT STUDIO 的启动失败,又不想重装系统,找了很多的工具,最重要的windows installer clean up.cleanup_tool,步骤如下

Android在layout xml中使用include完成静态加载

Android在layout xml中使用include完成静态加载 include静态加载:不仅可以加载布局,还可以加载控件(控件标签名要在最外层)include标签中有个layout属性就是专门用来加载的. 在Android的layout样式定义中,可以使用xml文件方便的实现,有时候为了模块的复用,使用include标签可以达到此目的.例如: <include layout="@layout/otherlayout"></div> android开发的官方

[转]Android 超高仿微信图片选择器 图片该这么加载

快速加载本地图片缩略图的方法: Android 超高仿微信图片选择器 图片该这么加载 其示例下载: 仿微信图片选择器 ImageLoader