Android Wear上的长期应用程序

时间:2014-07-11 14:14:19

标签: wear-os

Android Wear生态系统似乎是围绕用户将与之交互,然后关闭的快速任务构建的。这适用于大多数应用程序,但是那个涵盖长时间运行任务的应用程序,并且在手表休眠时不应自动关闭?

我的具体案例:Swing by Swing Golf GPS。首选操作是让应用程序保持活动状态,并在屏幕因用户操作而唤醒时显示。一次使用的使用寿命为2至4小时。

将应用程序保持在Android Wear设备前端和中心的时间长于一次使用的方法有哪些?

3 个答案:

答案 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启动时将其从服务中拉出来。

您可以扩展可穿戴服务,但我只使用通用服务作为我的应用程序的中心,并且工作得很好(应用程序运行数天没有问题)。