Rexsee API紹介:AndroidタイミングタスクAlarm、基本的な目覚まし時計機能例付き
Rexsee拡張Alarmを使用すると、タスクタイミングに関する機能を迅速に実現できます.基本的なアラームイベントは次のとおりです.
【関数】
void set(String argu)
【説明】
目覚まし時計をセットする.
【戻る】
なし
【パラメータ】
Argu:型は「key 1=value 1;key 2=value 2;...」の双曲線コサインを返します.まず、このパラメータテーブルはrexseeNotificationをサポートする.show()関数のすべてのパラメータは、通知(rexseeNotification.show()を呼び出す)を表示するために使用されます.rexseeNotificationを参照してください.また、このパラメータテーブルには、次のパラメータが追加されています. forcerepeat:trueまたはfalse.目覚まし時計がページではなくプッシュ情報によって設定される場合、idと以前のプッシュ情報のidが重複する場合、このパラメータによって強制的に再実行するか否かが決定され、デフォルトではfalse、すなわち、id重複のプッシュ情報は繰り返し実行されない. command:目覚まし時計が鳴ったときに実行するコマンド.現在サポートされているコマンドは、 です. notification:通知、デフォルト値を送信します. startApplication:プログラムを起動します. cleanApplicationData:本プログラムのビジネスデータ(プライベートメモリ内のすべてのデータ)を消去します. notificationimmediately:trueまたはfalse.このパラメータは、コマンドがnotificationであるかどうかにかかわらず、目覚まし時計を設定する最初の時間に通知を送信し、指定した時間が遅延した後にコマンドを実行することを可能にし、デフォルトはfalseです. notificationafterexec:trueまたはfalse.このパラメータは、コマンドがnotificationであるかどうかにかかわらず、システムがコマンドを実行した後に通知を送信することを許可し、デフォルトはfalseである. alermname:目覚まし時計の名前、デフォルトは「defaultAlerm」です. alermfirsttime:タイムスタンプ、最初の目覚まし時計が鳴った(コマンドを実行する)時間、0または現在の時間より小さいタイムスタンプを設定すると、コマンドはすぐに実行され、デフォルトはすぐに実行されます. alermrepeatinterval:ミリ秒数、最初の目覚まし時計が鳴った後、この時間間隔を置いてコマンドを繰り返し、ゼロ未満の場合は繰り返しません. startApplicationUrl:コマンドがstartApplicationの場合、プログラム起動後にアクセスするURLアドレス.
【例】
【関数】
JsonObjectArray get()
【説明】
すべてのアラーム情報を読み込みます.
【戻る】
JSONオブジェクト配列は、eval('('+json+')')を使用してJavaScriptオブジェクト配列に変換されます.
【パラメータ】
なし
【例】
【関数】
void cancel(String name)
【説明】
目覚まし時計を消す.
【戻る】
なし
【パラメータ】
name:目覚まし時計の名前.
【例】
rexseeAlarm.JAvaソースコードは以下の通りです.
Rexseeのソースコードと関数イベントのみを整理し、関連するdemoまたはソースコード解析はRexseeコミュニティで理解できます.現在、Rexseeは2000近くの拡張を提供しており、Androidのオリジナル機能を90%以上カバーし、すべてオープンしています.http://www.rexsee.com/
【関数】
void set(String argu)
【説明】
目覚まし時計をセットする.
【戻る】
なし
【パラメータ】
Argu:型は「key 1=value 1;key 2=value 2;...」の双曲線コサインを返します.まず、このパラメータテーブルはrexseeNotificationをサポートする.show()関数のすべてのパラメータは、通知(rexseeNotification.show()を呼び出す)を表示するために使用されます.rexseeNotificationを参照してください.また、このパラメータテーブルには、次のパラメータが追加されています.
【例】
rexseeAlarm.set('command=startApplication;startApplicationUrl=http://www.rexsee.com/rexsee/alarmClock.html;alermName=test;alermfirsttime='+(rexseeAlarm.getCurrentTime()+5000)+';title= ;message= ;url=http://www.rexsee.com/rexsee/alarmClock.html');
rexseeDialog.toast(' !');
【関数】
JsonObjectArray get()
【説明】
すべてのアラーム情報を読み込みます.
【戻る】
JSONオブジェクト配列は、eval('('+json+')')を使用してJavaScriptオブジェクト配列に変換されます.
【パラメータ】
なし
【例】
alert(rexseeAlarm.get());
【関数】
void cancel(String name)
【説明】
目覚まし時計を消す.
【戻る】
なし
【パラメータ】
name:目覚まし時計の名前.
【例】
rexseeAlarm.cancel('test');
rexseeDialog.toast(' !');
rexseeAlarm.JAvaソースコードは以下の通りです.
/*
* Copyright (C) 2011 The Rexsee Open Source Project
*
* Licensed under the Rexsee License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.rexsee.com/CN/legal/license.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package rexsee.core.alarm;
import rexsee.core.browser.JavascriptInterface;
import rexsee.core.browser.RexseeBrowser;
import rexsee.core.device.NotificationArgumentsSheet;
import rexsee.core.device.RexseeNotification;
import rexsee.core.receiver._Receiver;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class RexseeAlarm implements JavascriptInterface {
private static final String INTERFACE_NAME = "Alarm";
@Override
public String getInterfaceName() {
return mBrowser.application.resources.prefix + INTERFACE_NAME;
}
@Override
public JavascriptInterface getInheritInterface(RexseeBrowser childBrowser) {
return this;
}
@Override
public JavascriptInterface getNewInterface(RexseeBrowser childBrowser) {
return new RexseeAlarm(childBrowser);
}
public static final String ALARM_ACTION = "action.alarm.id_";
public static final String ALARM_EXTRA_ARGU = "argu";
public static final String DATABASE_ALARM = "alarm.db";
public static final String TABLE_ALARM = "alarm";
private final Context mContext;
private final RexseeBrowser mBrowser;
public RexseeAlarm(RexseeBrowser browser) {
mBrowser = browser;
mContext = browser.getContext();
}
public RexseeAlarm(Context context) {
mBrowser = null;
mContext = context;
}
private static void _setAlarm(Context context, AlarmManager mgr, String body, boolean save) {
NotificationArgumentsSheet argu = (new NotificationArgumentsSheet()).parseArguments(body);
if (argu.notificationimmediately) {
(new RexseeNotification(context)).show(argu);
}
if (argu.getAlermFirstTime() > System.currentTimeMillis()) {
Intent intent = new Intent(context, _Receiver.class);
intent.setAction(ALARM_ACTION + argu.alermname);
intent.putExtra(ALARM_EXTRA_ARGU, body);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mgr.cancel(pendingIntent);
long interval = argu.getAlermRepeatInterval();
if (interval > 0) {
mgr.setRepeating(AlarmManager.RTC_WAKEUP, argu.getAlermFirstTime(), interval, pendingIntent);
} else {
mgr.set(AlarmManager.RTC_WAKEUP, argu.getAlermFirstTime(), pendingIntent);
}
if (save) {
SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);
try {
db.execSQL("CREATE TABLE if not exists " + TABLE_ALARM + " (name TEXT, argu TEXT, Primary key(name));");
db.execSQL("DELETE FROM " + TABLE_ALARM + " WHERE name='" + argu.alermname + "';");
db.execSQL("INSERT INTO " + TABLE_ALARM + " VALUES ('" + argu.alermname + "', '" + body + "');");
} catch (Exception e) {
}
db.close();
}
} else {
exec(context, body);
}
}
private static void _deleteAlarm(Context context, String name) {
SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);
try {
db.execSQL("DELETE FROM " + TABLE_ALARM + " WHERE name='" + name + "';");
} catch (Exception e) {
}
db.close();
}
public static void exec(Context context, String body) {
NotificationArgumentsSheet argu = (new NotificationArgumentsSheet()).parseArguments(body);
if (argu.getAlermRepeatInterval() <= 0) {
_deleteAlarm(context, argu.alermname);
}
(new RexseeRemoteCommand(context, body)).exec();
}
public static void updateAlarm(Context context) {
SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
try {
db.execSQL("CREATE TABLE if not exists " + TABLE_ALARM + " (name TEXT, argu TEXT, Primary key(name));");
Cursor cursor = db.rawQuery("SELECT * from " + TABLE_ALARM + ";", null);
if (cursor != null && cursor.getCount() != 0) {
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
_setAlarm(context, mgr, cursor.getString(1), false);
}
}
cursor.close();
} catch (Exception e) {
}
db.close();
}
//JavaScript Interface
public void set(String body) {
_setAlarm(mContext, (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE), body, true);
}
public String get() {
SQLiteDatabase db = mContext.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);
String rtn = "";
try {
Cursor cursor = db.rawQuery("SELECT * from " + TABLE_ALARM + ";", null);
if (cursor != null && cursor.getCount() != 0) {
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
if (i > 0) rtn += ",";
rtn += "{";
rtn += "\"name\":\"" + cursor.getString(0) + "\"";
rtn += ",\"argu\":\"" + cursor.getString(1) + "\"";
rtn += "}";
}
}
cursor.close();
} catch (Exception e) {
if (mBrowser != null) mBrowser.exception(getInterfaceName(), e);
}
db.close();
return "[" + rtn + "]";
}
public void cancel(String name) {
Intent intent = new Intent(mContext, _Receiver.class);
intent.setAction(ALARM_ACTION + name);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
mgr.cancel(pendingIntent);
_deleteAlarm(mContext, name);
}
public long getCurrentTime() {
return System.currentTimeMillis();
}
public long getMillisPerHour() {
return 3600 * 1000;
}
public long getMillisPerDay() {
return 3600 * 1000 * 24;
}
}
Rexseeのソースコードと関数イベントのみを整理し、関連するdemoまたはソースコード解析はRexseeコミュニティで理解できます.現在、Rexseeは2000近くの拡張を提供しており、Androidのオリジナル機能を90%以上カバーし、すべてオープンしています.http://www.rexsee.com/