作为最贴身的电子移动设备,手机上的提醒功能无疑是最实用的了.Android中Notification简单易用,接下来就是对两种常用用法的介绍.
基于时间的提醒:
Notification本身没有管理时间的能力,所以我们用AlarmManager来触发Notification.
package test.TestNotification;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
/**
* 用AlarmManager来触发Notification
*/
public class TestNotification extends Activity
{
/**
* 初始化
*/
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//得到使用AlarmManager的权限
AlarmManager alarms=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
//AlarmManager要做的事情,打开NotificationService(这是个自定义Service稍后会补充)
Intent intent=new Intent(this,NotificationService.class);
PendingIntent pendingIntent=PendingIntent.getService(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
//设定时间,将System.currentTimeMillis()换成你需要的时间即可,这里是立即触发
alarms.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),pendingIntent);
}
}
在前面我们使用了Service来触发Notification,所以接下来自定义一个Service.
package test.TestNotification;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
/**
* 自定义Service,在其中启动Notification
*/
public class NotificationService extends Service
{
/**
* 继承Service必须实现的方法,这里用不到
*/
public IBinder onBind(Intent intent)
{
return null;
}
/**
* 初始化
*/
public void onCreate()
{
//以下是对Notification的各种参数设定
int icon=R.drawable.icon;
String tickerText=”这是一个提醒”;
long when=(System.currentTimeMillis());
Notification nfc=new Notification(icon,tickerText,when);
Context cxt=getApplicationContext();
String expandedTitle=”基于时间的提醒来了”;
String expandedText=”其实没什么重要的事”;
//intent是非常重要的参数,用来启动你实际想做的事情,设为null后点击状态栏上的Notification就没有任何反应了.
Intent intent=null;
PendingIntent nfcIntent=PendingIntent.getActivity(cxt,0,intent,0);
nfc.setLatestEventInfo(cxt,expandedTitle,expandedText,nfcIntent);
//发送Notification
NotificationManager nfcManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
nfcManager.notify(1,nfc);
}
}
这样,一个简单的定时提醒就完成了.
只要在应用中获得正确的时间,通过AlarmManager在那个时间点触发Service中的Notification,再用Notification启动相应的应用即可.
注意:AndroidManifest.xml中要添加上用到的NotificationService.(以上代码在Android2.2中测试通过)
转:http://www.freeideastudio.com.cn/wordpress/?p=329
最近写程序就遇到了这么个难题,在TextView 上,正常字体颜色显示是黑色。如果在activity中动态的改变字体颜色(预期目标是字体颜色变成红色),无论如何都是灰显,简单代码如下所示。郁闷了好些时日。
private TextView mTextDisp;
mTextDisp = (TextView) findViewById(R.id.textDisp_mian);
mTextDisp.setTextColor(R.color.red);(使用color.xml文件中的颜色值)
这样写是怎么也变不成红色的,而且程序不报错,不知道朋友们有没有试过。而且debug所走的分支也是正确的。
我就单独写了一个Demo来测试,结果还是灰显。
有的朋友要说,是不是red的颜色值写错了。不是,color中的颜色值配置对着呢。
其实,答案很简单,就错在mTextDisp.setTextColor(R.color.red);这行代码上。
首先,在xml中不要写默认的字体颜色值,即android:textColor="xxx"
其次,在activity中mTextDisp.setTextColor(context.getResources().getColor(R.color.red));(使用color.xml文件中的颜色值)
这样就OK了。或者直接使用Color类中的值:mTextDisp.setTextColor(Color.RED);(使用系统自带的颜色类Color类中的颜色值)。
@implementation SettingUtil
+ (NSString *)dataFilePath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"config.plist"];
}
+(NSMutableDictionary *)loadFromFile {
NSString *error = nil;
NSPropertyListFormat format;
NSMutableDictionary *dict = nil;
NSString *filePath = [self dataFilePath];
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
filePath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"];
}
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:filePath];
dict = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&error];
return dict;
}
+(BOOL)saveToFile:(NSMutableDictionary *)withData {
NSString *error = nil;
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:withData format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
if(plistData) {
return [plistData writeToFile:[self dataFilePath] atomically:YES];
} else {
return FALSE;
}
}