怎样使用Tizen的通知API

应用程序的Notification

Notification API允许你在应用程序中给用户展现一些通知消息。  通过在API中指定该图标的路径参数显示的图标也用于特定通知。 播放设备中指定路径的音乐也是一种特殊的通知。 Tizen支持三种通知类型:

a)SIMPLE:一种简单的通知,张贴支护马上就会显示。 用户通过点击该通知或者点击上面的关闭按钮就能删除该通知。 这种通知再状态栏被拖掉的时候也会自动消失。

b)ONGOING:该通知用来通知用户关于正在运行的状态。 这种通知用户是不能删除的。 这种通知只能由开发者通过应用程序中的API函数来删除。 如需更多关于这方面的详细信息,请参阅:。

c)PROGRESS:这种通知用来告诉用户任务的进程,比如下载进程。 用户也不能删除这种通知。 要想删除这种通知,也需要在应用程序中调用API来删除。 Tizen的通知API允许使用update()函数:tizen.notification.update(前一个通知的变量)来更新前一个张贴过的通知。

现:

在这个应用程序中,一些系统事件,如电池状态,存储情况,CPU负载将会通过通知的形式告诉给用户。 本文通过该实例程序来讲解。 我们注意以下几点:

  1. 用update()通知API来张贴电池状态和充电状态的通知。
  1. 对存储状态张贴通知,如果存储达到或超出上限是也张贴通知。
  1.  在通知中显示CPU的负载状态。

图1:要通知的属性列表 

  图2:收到当前存储状态的通知

 图3:电池状态和充电状态
收到更新通知

  图4:收到的所有通知的清单

以下是通知如何Tizen API中的示例应用程序实施的简要说明。 您可以按照以下几个简单的步骤在你的应用程序中添加通知功能。
步骤:
1)在应用程序的config.xml文件中添加需要的权限。

<tizen:privilege name="http://tizen.org/privilege/tizen"/>  
<tizen:privilege name="http://tizen.org/privilege/application.kill"/> 
<tizen:privilege name="http://tizen.org/privilege/notification.read"/> 
<tizen:privilege name="http://tizen.org/privilege/notification.write"/>  
<tizen:privilege name="http://tizen.org/privilege/systeminfo"/>

在index.html文件中创建检查框,让用户选择需要知道的系统信息。

<div data-role="content">  

<table class="checkboxtable">

 <tr>

<td><input type="checkbox" id="batterylevel" /></td>

<td id="td2"><span>Notify me on battery level</span></td>

</tr>

<tr>

<td><input type="checkbox" id="storagelevel" /></td>

<td><span>Notify me on storage level</span></td>

</tr>

<tr>

<td><input type="checkbox" id="cpuloadlevel" /></td>

<td><span>Notify me on cpu load </span></td>

</tr>

</table> <br> <br>
<button id="getAllNotifications">See All Notifications</button> <br>  
<button id="removeAllNotifications">Remove all notifications</button> </div>

3)定义UI元素的属性

.checkboxtable
{
   width:100%;
}
.checkboxtable td
{
   width:20%;
}
.checkboxtable #td2
{
   width:80%;
}

4)使用addPropertyValueChangeListener() API注册监听器来监听需要的系统属性,在下面的代码中你可以看到。

/**
 * Checks if the specified property is present in the system and starts a watch process to the corresponding property if it is present in the system
 * @param property  : receives the property of the system(storage, battery etc)
 * @param onBatterySuccess : callback interface specifying a success callback with SystemInfoProperty as input argument
@param SystemInfoOptions: specify the high and low threshold values to be watched on
 *
 */
function watchBatteryLevel()
{
	try {
	//listener for monitoring battery level change on high and low thresholds
		gBatteryListener = tizen.systeminfo.addPropertyValueChangeListener("BATTERY", onBatterySuccess, {highThreshold: 0.9,lowThreshold : 0.2});
		alert("Watching battery level started");
	} catch(e) {
		alert("Exception: " + e.message );
	}
}
function getSystemProperty(property, onSuccess) {
	try {
		tizen.systeminfo.getPropertyValue(property, onSuccess, onError);
	} catch (e) {
		alert("Exception: " + e.message);
	}
}

5)检查main.js中系统信息的当前状态,用tizen.notification.post API发送当前事件的通知,参考下面的代码。

function onBatterySuccess(battery) {
	postBatteryNotification(battery);
}

function postBatteryNotification(battery)
{
console.log("The battery level is " + battery.level);
if(battery.level>=0.9)
{
try {
var notificationDict = {
content : "This is a simple notificaiton.",
iconPath : "images/image1.jpg"
};
currentBatteryLevelNotification = new tizen.StatusNotification("SIMPLE",
"battery is high, current level is:"+battery.level, notificationDict);

tizen.notification.post(currentBatteryLevelNotification);
} catch (err) {
console.log (err.name + ": " + err.message);
}
}
else if(battery.level<=0.2)
{
try {
var notificationDict = {
content : "This is a simple notificaiton.",
iconPath : "images/image1.jpg"
};
currentBatteryLevelNotification = new tizen.StatusNotification("SIMPLE",
"battery is low, current level is:"+battery.level, notificationDict);
tizen.notification.post(currentBatteryLevelNotification);
} catch (err) {
console.log (err.name + ": " + err.message);
}
}
batteryChargeCheck(battery);
}

6)为使能的系统事件定义通知:

/**
* Displays the notification according to the selected option
*
*/
function registerHandlers() {
    $('#batterylevel').click(function() {
 if ($(this).attr("checked")) {
	watchbatterylevel();
 } else {
	stopbatterylevel();
 }
    });
   $('#storagelevel').click(function() {
if ($(this).attr("checked")) {
    watchstoragelevel();
} else {
     stopstoragelevel();
}
});

$('#cpuloadlevel').click(function() {
if ($(this).attr("checked")) {
watchcpuloadlevel();
} else {
stopcpuloadlevel();
}
});
$('#getAllNotifications').click(function() {
geAllNotifications();
});

$('#removeAllNotifications').click(function() {
removeAllNotifications();
});
}

7)你可以用新的通知来更新当前的通知,或者直接用tizen.notification.update () API来更新当前通知的状态:

if(battery.isCharging === true)
{
try {
	// use a varible for the previoulsy posted notification.
	currentBatteryLevelNotification.content = "Battery state: Charging...";
   	tizen.notification.update(currentBatteryLevelNotification);
	} catch (err){
	     console.log (err.name + ": " + err.message);
	}
}

8)你可以使用getAll() API查看所有的通知。

var notifications = tizen.notification.getAll();
.  .   .
var index = 0;
for (index =0; index<=notifications.length; index++)
{
	//populating the notifications in a list
	gInfo += makeDividerListItem("Notification " + (index +1))
		+make2lineListItem("Notification Title", notifications[index].title)
                +make2lineListItem("icon path:", notifications[index].iconPath)
		+make2lineListItem("Status Notification type", notifications[index].statusType)
                + make2lineListItem("Posted time", notifications[index].postedTime);
}

9)你也可以一次性删除所有的通知。

function RemoveAllNotifications(){
	tizen.notification.removeAll();
        alert("All the notifications are removed ");
}

使用示例:

在Tizen SDK 2.0上编译并运行应用程序:

1. 选择你想要知道的系统属性。

2. 通知就会显示你想知道的系统信息的状态。 只要系统信息发生变化,通知就会显示。

3. 要在一段时间后查看通知,请单击指示条上拖下来。

4. 点击清除按钮来清除通知。

5. 点击主列表中的“See All Notifications”按钮来查看所有的通知,比如通知类型,张贴时间和日期等。

6. 点击主列表中的“Remove All notifications”按钮来删除所有的通知。

构建要求:

此应用程序针对 Tizen 2.0 固件设备构建。

使用的SDK环境:Tizen 2.0.0公开版

附录:示例应用程序连接。

文件附件: