If you think the Android project AndroidWearable-Samples listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
package com.example.android.wearable.elizachat;
/*fromwww.java2s.com*/import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.RemoteInput;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.app.NotificationManagerCompat;
import android.text.TextUtils;
import android.util.Log;
/**
* A service that runs in the background and provides responses to the incoming messages from the
* wearable. It also keeps a record of the chat session history, which it can provide upon request.
*/publicclass ResponderService extends Service {
publicstaticfinal String ACTION_INCOMING = "com.example.android.wearable.elizachat.INCOMING";
publicstaticfinal String ACTION_RESPONSE = "com.example.android.wearable.elizachat.REPLY";
publicstaticfinal String EXTRA_REPLY = "reply";
privatestaticfinal String TAG = "ResponderService";
private ElizaResponder mResponder;
private String mLastResponse = null;
private StringBuffer mCompleteConversation = new StringBuffer();
private LocalBroadcastManager mBroadcastManager;
@Override
publicvoid onCreate() {
super.onCreate();
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Chat Service started");
}
mResponder = new ElizaResponder();
mBroadcastManager = LocalBroadcastManager.getInstance(this);
processIncoming(null);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
publicint onStartCommand(Intent intent, int flags, int startId) {
if (null == intent || null == intent.getAction()) {
return Service.START_STICKY;
}
String action = intent.getAction();
if (action.equals(ACTION_RESPONSE)) {
Bundle remoteInputResults = RemoteInput.getResultsFromIntent(intent);
CharSequence replyMessage = "";
if (remoteInputResults != null) {
replyMessage = remoteInputResults.getCharSequence(EXTRA_REPLY);
}
processIncoming(replyMessage.toString());
} elseif (action.equals(MainActivity.ACTION_GET_CONVERSATION)) {
broadcastMessage(mCompleteConversation.toString());
}
return Service.START_STICKY;
}
privatevoid showNotification() {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Sent: " + mLastResponse);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.eliza))
.setContentText(mLastResponse)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.bg_eliza))
.setSmallIcon(R.drawable.bg_eliza)
.setPriority(NotificationCompat.PRIORITY_MIN);
Intent intent = new Intent(ACTION_RESPONSE);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT);
Notification notification = builder
.extend(new NotificationCompat.WearableExtender()
.addAction(new NotificationCompat.Action.Builder(
R.drawable.ic_full_reply, getString(R.string.reply), pendingIntent)
.addRemoteInput(new RemoteInput.Builder(EXTRA_REPLY)
.setLabel(getString(R.string.reply))
.build())
.build()))
.build();
NotificationManagerCompat.from(this).notify(0, notification);
}
privatevoid processIncoming(String text) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Received: " + text);
}
mLastResponse = mResponder.elzTalk(text);
String line = TextUtils.isEmpty(text) ? mLastResponse : text + "\n" + mLastResponse;
// Send a new line of conversation to update the Activity, unless the incoming text was
// empty.
if (!TextUtils.isEmpty(text)) {
broadcastMessage(line);
}
NotificationManagerCompat.from(this).cancelAll();
showNotification();
mCompleteConversation.append("\n" + line);
}
privatevoid broadcastMessage(String message) {
Intent intent = new Intent(MainActivity.ACTION_NOTIFY);
intent.putExtra(MainActivity.EXTRA_MESSAGE, message);
mBroadcastManager.sendBroadcast(intent);
}
@Override
publicvoid onDestroy() {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Chat Service stopped");
}
NotificationManagerCompat.from(this).cancel(0);
mBroadcastManager = null;
super.onDestroy();
}
}