# Titanium.Android.Notification
UI notifications that can be sent while the application is in the background.
# Overview
Notifications alert the user that something is happening to your application while it is in the background. Notifications appear in the notification drawer until the user clears them and on the lock screen for devices running Android 5.0 or greater. Note that the user can filter or turn notifications on and off from Settings.
For Android toast notifications (pop-up notifications sent while the application is in the foreground), see Titanium.UI.Notification.
To create a notification, use the Titanium.Android.createNotification method.
Pass the Notification object to the methods of the Titanium.Android.NotificationManager class to send or cancel notifications.
For examples of using Notifications, see Android Notifications.
Further Reading:
# Android 5.0 Changes
Starting with Android 5.0 (API 21), ticker text, defined with the tickerText
property,
no longer appears in the status bar when the notification is first sent but is used as an
audible notification if accessibility services are enabled.
Notifications now appear in the lock screen. The user can customize the visibility level of
these notifications from Settings. The visibility level is based on the visibility
property set on the notification.
# Examples
# Simple Notification Example
The following example shows how to create a notification that launches the application when the user clicks on the notification.
To have the notification launch an application when the user clicks on it,
assign the contentIntent
property to an Titanium.Android.Intent object
that launches the main activity of the application by specifying the packageName
and className
properties of the intent.
The packageName
is the project's application ID. For Titanium applications, you
can find this in the tiapp.xml
file.
The className
is the name of the main activity, prefixed with the packageName
.
For Titanium applications, the name of the main activity is the application name with
only the first character capitalized suffixed with Activity
. You can also find the name
of the main activity in the build/android/AndroidManifest.xml
file after you build your
application.
For example, if the application ID is com.appcelerator.notificationsample
and the
application name is NotificationSample
, the class name will be:
com.appcelerator.notificationsample.NotificationsampleActivity
The notification icon must be specified as an Android resource ID. In this case,
the icon, my_icon.png
would be placed in platforms/android/res/drawable/my_icon.png
.
See Titanium.App.Android.R for more information.
This example does not include a custom alert sound. For information on adding a custom alert sound, see Titanium.Android.Notification.sound.
// Intent object to launch the application
var intent = Ti.Android.createIntent({
action: Ti.Android.ACTION_MAIN,
// Substitute the correct class name for your application
className: 'com.appcelerator.notificationsample.NotificationsampleActivity',
// Substitue the correct package name for your application
packageName: 'com.appcelerator.notificationsample'
});
intent.flags |= Ti.Android.FLAG_ACTIVITY_NEW_TASK;
intent.addCategory(Ti.Android.CATEGORY_LAUNCHER);
// Create a PendingIntent to tie together the Activity and Intent
var pending = Titanium.Android.createPendingIntent({
intent: intent,
flags: Titanium.Android.FLAG_UPDATE_CURRENT
});
// Create the notification
var notification = Titanium.Android.createNotification({
// icon is passed as an Android resource ID -- see Ti.App.Android.R.
icon: Ti.App.Android.R.drawable.my_icon,
contentTitle: 'Something Happened',
contentText : 'Click to return to the application.',
contentIntent: pending
});
// Send the notification.
Titanium.Android.NotificationManager.notify(1, notification);
# Bundled Notifications Example
The following example shows how to create bundled notifications.
var id = 100,
groupKey = 'group_key';
for (var i = 3; i > 0; i--) {
Ti.Android.NotificationManager.notify(id++,
Ti.Android.createNotification({
icon: Ti.Android.R.drawable.ic_dialog_info,
contentTitle: 'NOTIFICATION #' + i,
contentText : 'Lorem ipsum dolor sit amet, facer eruditi omittantur cu pri, nibh nonumy putant eam eu.'
groupKey: groupKey
})
);
}
Ti.Android.NotificationManager.notify(id++,
Ti.Android.createNotification({
icon: Ti.Android.R.drawable.ic_dialog_info,
contentTitle: 'NOTIFICATIONS',
contentText : 'You have 3 notifications.',
groupKey: groupKey,
groupSummary: true
})
);
# Properties
# apiName READONLY
The name of the API that this proxy corresponds to.
The value of this property is the fully qualified name of the API. For example, Titanium.UI.Button
returns Ti.UI.Button
.
# audioStreamType
The audio stream type to use when playing the sound.
Specify one of the STREAM
constants from Titanium.Android.
# bubbleParent
Indicates if the proxy will bubble an event to its parent.
Some proxies (most commonly views) have a relationship to other proxies, often established by the add() method. For example, for a button added to a window, a click event on the button would bubble up to the window. Other common parents are table sections to their rows, table views to their sections, and scrollable views to their views. Set this property to false to disable the bubbling to the proxy's parent.
Default: true
# category
Sets the notification's category.
If your notification falls into one of the predefined categories, assign it accordingly. Aspects of the system UI such as the notification shade may use this information to make ranking and filtering decisions. This property only works for devices running Android 5.0 (API 21) and greater.
- Titanium.Android.CATEGORY_ALTERNATIVE
- Titanium.Android.CATEGORY_BROWSABLE
- Titanium.Android.CATEGORY_DEFAULT
- Titanium.Android.CATEGORY_DEVELOPMENT_PREFERENCE
- Titanium.Android.CATEGORY_EMBED
- Titanium.Android.CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST
- Titanium.Android.CATEGORY_HOME
- Titanium.Android.CATEGORY_INFO
- Titanium.Android.CATEGORY_LAUNCHER
- Titanium.Android.CATEGORY_MONKEY
- Titanium.Android.CATEGORY_OPENABLE
- Titanium.Android.CATEGORY_PREFERENCE
- Titanium.Android.CATEGORY_SAMPLE_CODE
- Titanium.Android.CATEGORY_SELECTED_ALTERNATIVE
- Titanium.Android.CATEGORY_TAB
- Titanium.Android.CATEGORY_TEST
- Titanium.Android.CATEGORY_UNIT_TEST
- Titanium.Android.CATEGORY_ALARM
- Titanium.Android.CATEGORY_CALL
- Titanium.Android.CATEGORY_EMAIL
- Titanium.Android.CATEGORY_ERROR
- Titanium.Android.CATEGORY_EVENT
- Titanium.Android.CATEGORY_MESSAGE
- Titanium.Android.CATEGORY_PROGRESS
- Titanium.Android.CATEGORY_PROMO
- Titanium.Android.CATEGORY_RECOMMENDATION
- Titanium.Android.CATEGORY_SERVICE
- Titanium.Android.CATEGORY_SOCIAL
- Titanium.Android.CATEGORY_STATUS
- Titanium.Android.CATEGORY_TRANSPORT
# color
Accent color used behind icon.
Accent color of the circle used behind icon. The Icon will be stenciled in white on top of a cicle of the color set. For information about color values, see the "Colors" section of Titanium.UI.
See Android Reference for the color property.
# contentIntent
The PendingIntent
to execute when the expanded status entry is clicked.
# contentView
Custom layout to display in the notification.
Calling setLatestEventInfo or
setting the contentText
or contentTitle
properties causes the notification to use
the default notification layout, overriding any custom layout set through
contentView
.
If you use a custom layout, you can use the Titanium.Android.RemoteViews methods to update the displayed notification.
# defaults
Specifies which values should be taken from the defaults.
Specify the bitwise OR of the desired values: DEFAULT_LIGHTS, DEFAULT_SOUND, and DEFAULT_VIBRATE. Use DEFAULT_ALL to specify that all values should be taken from the defaults.
# deleteIntent
The PendingIntent
to execute when the status entry is deleted by the user with the "Clear All Notifications" button.
# flags
Set of flags for the notification.
Default: Titanium.Android.FLAG_AUTO_CANCEL
# icon
Notification icon, specified as an Android resource ID, or a local URL to a density-specific image.
If specified as a URL, the icon must be placed in one of the density-specific
folders under Resources/android/images
. For example, if your icon is called
my_icon.png
, you would create high- and medium-density versions of the icons
with the following paths:
Resources/android/images/res-hdpi/my_icon.png
Resources/android/images/res-mdpi/my_icon.png
To access this icon, you'd use the URL '/images/my_icon.png'.
To access the same icon using an Android resource ID, place the icon in:
platform/android/res/drawable/my_icon.png
This icon's resource ID can be referenced through the R object:
icon: Ti.App.Android.R.drawable.my_icon,
See R for more information on accessing Android resources by ID.
# largeIcon
Add a large icon to the notification (and the ticker on some devices) specified as an Android resource ID, or a local URL to a density-specific image.
If specified as a URL, the icon must be placed in one of the density-specific
folders under Resources/android/images
. For example, if your icon is called
my_large_icon.png
, you would create high- and medium-density versions of the icons
with the following paths:
Resources/android/images/res-hdpi/my_large_icon.png
Resources/android/images/res-mdpi/my_large_icon.png
To access this large icon, you'd use the URL '/images/my_large_icon.png'.
To access the same large icon using an Android resource ID, place the icon in:
platform/android/res/drawable/my_large_icon.png
This large icon's resource ID can be referenced through the R object:
icon: Ti.App.Android.R.drawable.my_large_icon,
See R for more information on accessing Android resources by ID.
# lifecycleContainer
The Window or TabGroup whose Activity lifecycle should be triggered on the proxy.
If this property is set to a Window or TabGroup, then the corresponding Activity lifecycle event callbacks will also be called on the proxy. Proxies that require the activity lifecycle will need this property set to the appropriate containing Window or TabGroup.
# priority
Sets the priority of the notification.
This property only works for devices running Android 4.1 (API 16) and greater.
Default: undefined but behaves as Titanium.Android.PRIORITY_DEFAULT
# sound
A URL to the sound to play.
The URL cannot refer to a file in the Resources directory, but it can refer to a file in the raw resources directory (resRawDirectory) or the external storage directory (externalStorageDirectory).
Note that this sound property is ignored on Android 8.0 and above. On these OS versions, you must use the sound property and that sound will play for any notification posted under that channel. Also, you will still need to set this notification's sound property for OS versions older than Android 8.0 too, meaning that the sound URL needs to be set in both places.
To play a raw resource file, place the audio file in the platform/android/res/raw
folder and reference it as:
notification.sound = Ti.Filesystem.resRawDirectory + audioFileName;
To play a file from the Resources directory, first copy it to external storage. For example, you could define the following function:
// Copy resource file to SD card, and return a native path.
// Return undefined if we can't copy the file.
function getOrCopyAudioFile(resourceFilename) {
var outFile = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory, 'sound', 'cricket.wav');
var outPath = outFile.nativePath;
if (! outFile.exists()) {
var outDir = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory, 'sound');
if (! outDir.isDirectory()) {
if (! outDir.createDirectory()) {
Ti.API.debug("Failed to create directory.");
outDir = null;
return undefined;
}
}
outDir = null;
var inFile = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'cricket.wav');
try {
inFile.copy(outPath);
} catch (ex) {
Ti.API.debug("Failed to copy file.");
inFile = null;
return undefined;
}
inFile = null;
}
outFile = null;
return outPath;
}
Then when creating a notification, specify the sound like this:
var sound = getOrCopyAudioFile();
if (sound) {
notification.sound = sound;
}
# style
Style object that can apply a rich notification style.
Notifications in the notification drawer appear in two main visual styles, normal view and big view. The big view of a notification only appears when the notification is expanded. This happens when the notification is at the top of the drawer, or the user clicks the notification. On platform versions that don't offer expanded notifications, styles that depend on expanded notifications have no effect.
# tickerText
Text to scroll across the screen when this item is added to the status bar.
For devices running Android 5.0 (API 21) and greater, the ticket text is no longer displayed in the status bar. However, this property is used as an audible notification if accessibility services are enabled.
# visibility
Allows user to conceal private information of the notification on the lockscreen.
This property only works on devices running Android 5.0 (API 21) and greater.
Default: undefined but behaves as Titanium.Android.VISIBILITY_PUBLIC
# wakeLock
Will wake up the device for the given time (in milliseconds) when the notification is shown.
The application needs to also set the android.permission.WAKE_LOCK
permission
in the Android manifest section of the tiapp.xml
file.
<ti:app>
<android>
<manifest>
<uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>
</android>
</ti:app>
Default: 0
# when
The timestamp for the notification (defaults to the current time).
If the timestamp is set to 0, no time is displayed in the notification window for this notification.
# Methods
# addAction
Add an action button to the notification
Up to three actions buttons can be added, additional buttons will be ignored.
Parameters
Name | Type | Description |
---|---|---|
icon | Number | String | Icon of the action button as URL or resource ID |
title | String | Title of the action button |
intent | Titanium.Android.PendingIntent | Intent of the action button |
Returns
- Type
- void
# addEventListener
Adds the specified callback as an event listener for the named event.
Parameters
Name | Type | Description |
---|---|---|
name | String | Name of the event. |
callback | Callback<Titanium.Event> | Callback function to invoke when the event is fired. |
Returns
- Type
- void
# applyProperties
Applies the properties to the proxy.
Properties are supplied as a dictionary. Each key-value pair in the object is applied to the proxy such that myproxy[key] = value.
Parameters
Name | Type | Description |
---|---|---|
props | Dictionary | A dictionary of properties to apply. |
Returns
- Type
- void
# fireEvent
Fires a synthesized event to any registered listeners.
Parameters
Name | Type | Description |
---|---|---|
name | String | Name of the event. |
event | Dictionary | A dictionary of keys and values to add to the Titanium.Event object sent to the listeners. |
Returns
- Type
- void
# removeEventListener
Removes the specified callback as an event listener for the named event.
Multiple listeners can be registered for the same event, so the
callback
parameter is used to determine which listener to remove.
When adding a listener, you must save a reference to the callback function in order to remove the listener later:
var listener = function() { Ti.API.info("Event listener called."); }
window.addEventListener('click', listener);
To remove the listener, pass in a reference to the callback function:
window.removeEventListener('click', listener);
Parameters
Name | Type | Description |
---|---|---|
name | String | Name of the event. |
callback | Callback<Titanium.Event> | Callback function to remove. Must be the same function passed to |
Returns
- Type
- void
# setLatestEventInfo
Sets the latest event info using the built-in notification view for this notification.
Parameters
Name | Type | Description |
---|---|---|
contentTitle | String | Title to display when the notification is expanded. |
contentText | String | Text to display when the notification is expanded. |
contentIntent | Titanium.Android.PendingIntent | Intent to launch when the user clicks on the notification. |
Returns
- Type
- void
# setProgress
Set the progress this notification represents.
Parameters
Name | Type | Description |
---|---|---|
max | Number | Defines the maximum value the progress can take. |
progress | Number | Defines the progress value, between 0 and max. |
indeterminate | Boolean | Allows to enable the indeterminate mode. |
Returns
- Type
- void