【问题标题】:Appcelerator Titanium LocalNotification for Android适用于 Android 的 Appcelerator Titanium LocalNotification
【发布时间】:2012-01-14 07:57:27
【问题描述】:

Android 中是否有可用的 LocalNotification。(类似于Titanium.App.iOS.scheduleLocalNotification

我需要一些针对 Android 平台的简单通知(如警报),即使我的应用程序已关闭。钛有可能吗?

【问题讨论】:

    标签: android titanium push-notification appcelerator appcelerator-mobile


    【解决方案1】:

    在 android 中您也可以触发通知,但它不会显示为警报框。相反,它将显示在通知区域中。这是在 android 中触发通知的代码 sn-p。

    alarmTimeIntent = Ti.Android.createIntent({
                    className: 'org.appcelerator.titanium.TiActivity',
                    packageName: 'package name here',
                    flags: Titanium.Android.FLAG_ACTIVITY_CLEAR_TOP | Titanium.Android.FLAG_ACTIVITY_SINGLE_TOP 
                });
    
                var alarmTimePendingIntent = Ti.Android.createPendingIntent({
                    activity: Ti.Android.currentActivity,
                    intent: alarmTimeIntent,
                    type: Ti.Android.PENDING_INTENT_FOR_ACTIVITY,
                    flags: Titanium.Android.FLAG_CANCEL_CURRENT
                });
    
                var alarmTimeNotification = Titanium.Android.createNotification({
                    contentIntent: alarmTimePendingIntent,
                    contentTitle: 'Content Title Here',
                    tickerText: 'Ticker text here',
                    defaults:Titanium.Android.NotificationManager.DEFAULT_SOUND,
                    when: new Date()
                });
    
                Ti.Android.NotificationManager.notify(1, alarmTimeNotification);
    

    【讨论】:

    • 即使我关闭了我的应用程序是否会起作用?我应该在这里使用什么(packageName:'package name here')
    • 实际上我写了 com.*.* 我的应用程序 ID,但我认为它不会影响。我认为它也可以在没有它的情况下工作,但仍然只是写你的应用程序 ID 或与 com.*.* 相关的任何内容......而且它会工作,但你有使用后台服务。因为在 android 中它不会像 iphone 那样自动触发。你必须手动开火。
    • 最后一行 .notify 将触发通知。
    • 谢谢..我会检查一下...你知道如何在 Titanium for Android Platform 中运行后台服务吗?
    • 您必须在 resources/android/ 文件夹中创建一个服务文件。并进入 tiapp.xml,然后您就可以从您的应用程序调用该服务。
    【解决方案2】:

    使用 Ben Bahrenburg 的 Bencoding AlarmManager:https://github.com/benbahrenburg/benCoding.AlarmManager

    这个模块提供你需要的东西。这真的很简单 - 只需在调度 Notification or Service 时将重复设置为 daily

    我正在发布用于创建每日通知的代码

    app.js

    //Import bencoding alarmmanager module into our Titanium App
    var alarmModule = require('bencoding.alarmmanager');
    var alarmManager = alarmModule.createAlarmManager();
    
    var isRunning = Ti.App.Properties.getBool("service_running", false);//get service running bool status
    if (isRunning) {
        Ti.API.info('service is running');
    } else {
        Ti.API.info('service is not running');
        alarmManager.addAlarmService({
            service : 'com.mkamithkumar.whatstoday.DailyEventNotificatoinService',//your service name as in AndroidManifest.xml
            hour : new Date().getHours(),
            repeat : 'daily'
        });
    }
    

    dailyEventNotificatoin.js //通知报警服务文件

    /* locate this file under:
     *    - Resources/android/
     *    or
     *    - app/assets/android/ (when working with Alloy)
     */
    
    var service = Ti.Android.currentService;
    var serviceIntent = service.getIntent();
    
    setNotification();
    
    Ti.Android.stopService(serviceIntent);
    
    function setNotification(alarm) {
        var activity = Ti.Android.currentActivity;
        var intent = Ti.Android.createIntent({
            action : Ti.Android.ACTION_MAIN,
            className : 'com.mkamithkumar.whatstoday.WhatsTodayActivity',
            flags : Ti.Android.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP
        });
        intent.addCategory(Titanium.Android.CATEGORY_LAUNCHER);
    
        var pending = Ti.Android.createPendingIntent({
            activity : activity,
            intent : intent,
            type : Ti.Android.PENDING_INTENT_FOR_ACTIVITY,
            flags : Ti.Android.FLAG_ACTIVITY_NO_HISTORY
        });
    
        //var message = "Time is up!";
    
        var notificationOptions = {
            contentIntent : pending,
            contentTitle : 'Whats Today - Featured Event',
            contentText : 'Tap to see todays featured event',
            tickerText : 'Whats Today Event Notification!',
            //when : new Date().getTime(),
            icon : Ti.App.Android.R.drawable.appicon,
            flags : Titanium.Android.FLAG_AUTO_CANCEL | Titanium.Android.FLAG_SHOW_LIGHTS | Titanium.Android.FLAG_INSISTENT,
            sound : Titanium.Android.NotificationManager.DEFAULT_SOUND
        };
    
        var notification = Ti.Android.createNotification(notificationOptions);
        Ti.Android.NotificationManager.notify(1, notification);
        Ti.App.Properties.setBool("service_running", true);
    
        Ti.Media.vibrate([0, 100, 100, 200, 100, 100, 200, 100, 100, 200]);
    }
    

    tiapp.xml

    <android xmlns:android="http://schemas.android.com/apk/res/android">
            <tool-api-level>16</tool-api-level>
            <manifest android:installLocation="auto" android:versionCode="1" android:versionName="1" package="com.mkamithkumar.whatstoday" xmlns:android="http://schemas.android.com/apk/res/android">
                <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11"/>
                <supports-screens android:anyDensity="true"/>
                <application android:debuggable="false" android:icon="@drawable/appicon" android:label="Whats Today" android:name="WhatsTodayApplication" android:theme="@android:style/Theme.DeviceDefault.Light">
    
                    <receiver android:name="bencoding.alarmmanager.AlarmNotificationListener"/>
                    <receiver android:name="bencoding.alarmmanager.AlarmServiceListener"/>
                    <activity android:configChanges="keyboardHidden|orientation|screenSize"
                    android:alwaysRetainTaskState="true"
                    android:label="Whats Today"
                    android:name=".WhatsTodayActivity"
                    android:theme="@style/Theme.Titanium"
                    android:launchMode="singleTop">
                        <intent-filter>
                            <action android:name="android.intent.action.MAIN"/>
                            <category android:name="android.intent.category.LAUNCHER"/>
                        </intent-filter>
                    </activity>
                    <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="org.appcelerator.titanium.TiActivity"/>
                    <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="org.appcelerator.titanium.TiTranslucentActivity" android:theme="@android:style/Theme.Translucent"/>
                    <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="org.appcelerator.titanium.TiModalActivity" android:theme="@android:style/Theme.Translucent"/>
                    <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="ti.modules.titanium.ui.TiTabActivity"/>
                    <activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity"/>
                    <service android:exported="false" android:name="org.appcelerator.titanium.analytics.TiAnalyticsService"/>
    
                </application>
                <uses-permission android:name="android.permission.VIBRATE"/>
                <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
                <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                <uses-permission android:name="android.permission.VIBRATE"/>
                <uses-permission android:name="android.permission.WAKE_LOCK"/>
                <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
                <uses-permission android:name="android.permission.INTERNET"/>
    
            </manifest>
            <services>
                <service type="interval" url="dailyEventNotificatoin.js"/>
            </services>
        </android>
    

    【讨论】:

    • benCoding.AlarmManager 真的很酷,但是你能在点击通知时打开你的应用程序吗?如果我必须需要这个功能怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多