Android Wear生态系统似乎是围绕用户将与之交互,然后关闭的快速任务构建的。这适用于大多数应用程序,但是那个涵盖长时间运行任务的应用程序,并且在手表休眠时不应自动关闭?
我的具体案例:Swing by Swing Golf GPS。首选操作是让应用程序保持活动状态,并在屏幕因用户操作而唤醒时显示。一次使用的使用寿命为2至4小时。
将应用程序保持在Android Wear设备前端和中心的时间长于一次使用的方法有哪些?
答案 0 :(得分:2)
所以,这就是我提出的解决方案:
使用PendingIntent
制作通知以打开主Activity
。同时传递删除操作的意图,因此我们知道用户是否已将其解除。
public class SbsNotificationHelper {
private static final String NOTIFICATION_DELETED_INTENT = "sbs.notificationDeleted";
private static boolean _isNotificationActive = false;
/** Public static methods */
public static NotificationCompat.Builder buildRoundInProgressNotification(Context context) throws Throwable {
Intent viewIntent = new Intent(context, SbsRoundActivity.class);
PendingIntent viewPendingIntent = PendingIntent.getActivity(context, 0, viewIntent, 0);
context.registerReceiver(_broadcastReceiver, new IntentFilter(NOTIFICATION_DELETED_INTENT));
_isNotificationActive = true;
Intent deleteIntent = new Intent(NOTIFICATION_DELETED_INTENT);
PendingIntent deletePendintIntent = PendingIntent.getBroadcast(context, 0, deleteIntent, 0);
NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.circle_button, "", viewPendingIntent).build();
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.bottom_bg);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.iphone_57x57)
.setLargeIcon(bitmap)
.setContentTitle("Golf GPS")
.setContentText("Swing by Swing")
.addAction(action)
.setDeleteIntent(deletePendintIntent)
.extend(new NotificationCompat.WearableExtender()
.setContentAction(0));
return notificationBuilder;
}
public static boolean isNotificationActive() {
return _isNotificationActive;
}
/** BroadcastReceiver */
private static final BroadcastReceiver _broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
_isNotificationActive = false;
}
};
}
使用onStop()
而非onPause()
发出通知。这样,如果您的应用中有多个活动,则可以展示它们(仅导致主onPause()
的{{1}})。
Activity
如果您与掌上电脑上的应用进行通信,也可以使用@Override
protected void onStop() {
super.onStop();
int notificationId = 001;
NotificationCompat.Builder notificationBuilder = SbsNotificationHelper.buildRoundInProgressNotification(context);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(notificationId, notificationBuilder.build());
}
内的通知。因此,当您的应用程序打开时,可以弹出并轻松访问通知。
WearableListenerService
答案 1 :(得分:0)
OnPause()
方法。这里可以完成一两个活动,但是它们应该保持相当轻量级,以防止延长用户等待时间。
答案 2 :(得分:0)
我在Wear设备上执行“扩展服务”应用程序时没有任何问题,该应用程序运行良好。
基本上:在您的Wear应用程序中 - 解耦您的GUI和应用程序逻辑。将app逻辑保留在服务中。我保留了一个包含所有GUI数据的类对象,并在Activity启动时将其从服务中拉出来。
您可以扩展可穿戴服务,但我只使用通用服务作为我的应用程序的中心,并且工作得很好(应用程序运行数天没有问题)。