- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在手持应用程序中启动一个 Activity ,并在用户点击穿戴中的通知操作按钮时发送一些数据。我正在使用以下代码在穿戴中构建通知。
public Notification buildNotification(Context context) {
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
new Intent(context, MainActivity.class), 0);
return buildBasicNotification(context).extend(new Notification.WearableExtender()
.setContentIcon(R.drawable.content_icon_small)
.setContentIconGravity(Gravity.START))
.addAction(new Notification.Action(R.drawable.ic_launcher,
"Action A", pendingIntent))
.build();
}
是否可以仅通过未决 Intent 在手持设备中启动 Activity ,或者我们是否应该在单击操作按钮时在穿戴设备中启动服务/Activity ,并从该 Activity/服务通过消息 api 向设备发送消息。任何帮助将不胜感激!
最佳答案
您的可穿戴设备应用与手持设备应用完全分开,唯一的通信路径是使用消息/数据 API,因此很遗憾,无法根据可穿戴设备上生成的通知直接触发手持设备上的操作。
您在需要采取的方法方面是正确的,但是:
OPEN_ON_PHONE_ANIMATION
(这会向您的用户显示一个可见标志,表明您的应用正在他们的手持设备上打开某些内容)notification/open
)向连接的设备发送消息messageEvent.getPath().equals("notification/open")
)此方法用于 Muzei启动表盘时从未激活手持应用程序中的动态壁纸。涵盖每个部分的代码可以在 Github repository. 上找到
具体来说,步骤 1 和 2 可以在 ActivateMuzeiIntentService 中找到:
public static void showNotification(Context context) {
Notification.Builder builder = new Notification.Builder(context);
// Set up your notification as normal
// Create the launch intent, in this case setting it as the content action
Intent launchMuzeiIntent = new Intent(context,
ActivateMuzeiIntentService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0,
launchMuzeiIntent, 0);
builder.addAction(new Notification.Action.Builder(R.drawable.ic_open_on_phone,
context.getString(R.string.common_open_on_phone), pendingIntent)
.extend(new Notification.Action.WearableExtender()
.setAvailableOffline(false))
.build());
builder.extend(new Notification.WearableExtender()
.setContentAction(0));
// Send the notification with notificationManager.notify as usual
}
protected void onHandleIntent(Intent intent) {
// Open on Phone action
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.build();
ConnectionResult connectionResult =
googleApiClient.blockingConnect(30, TimeUnit.SECONDS);
if (!connectionResult.isSuccess()) {
Log.e(TAG, "Failed to connect to GoogleApiClient.");
return;
}
List<Node> nodes = Wearable.NodeApi.getConnectedNodes(googleApiClient)
.await().getNodes();
// Ensure there is a connected device
if (!nodes.isEmpty()) {
// Show the open on phone animation
Intent openOnPhoneIntent = new Intent(this, ConfirmationActivity.class);
openOnPhoneIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
openOnPhoneIntent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE,
ConfirmationActivity.OPEN_ON_PHONE_ANIMATION);
startActivity(openOnPhoneIntent);
// Clear the notification
NotificationManager notificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
// Send the message to the phone to open Muzei
for (Node node : nodes) {
Wearable.MessageApi.sendMessage(googleApiClient, node.getId(),
"notification/open", null).await();
}
}
googleApiClient.disconnect();
}
然后手持端的第 3 步由 MuzeiWearableListenerService 处理:
public void onMessageReceived(MessageEvent messageEvent) {
String path = messageEvent.getPath();
if (path.equals("notification/open")) {
// In this case, we launch the launch intent for the application
// but it could be anything
PackageManager packageManager = getPackageManager();
Intent mainIntent = packageManager.getLaunchIntentForPackage(
getPackageName());
startActivity(mainIntent);
}
}
关于安卓磨损 : launching an activty in the handheld on clicking notification action button in wear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539672/
我想将 EditText 始终设置为 LTR,我该怎么做?android:textDirection 似乎确实是答案,我无法让项目使用该指令进行编译 最佳答案 为 editText 使用引力 andr
我希望我的应用在每次打开时都显示登录屏幕。使用 android:clearTaskOnLaunch="true" 一切正常。但是有一个错误,只有在手机关机并且应用程序首先使用小部件启动时才会发生。 I
实际上我的要求是我想将动态文件加载到像图像一样的网页中。视频,音频等,它来自 Assets 或应用程序自己的文件目录,这不是问题。 我尝试使用以下两种方式。 方式一 这是我的 html 文件在 ass
我正在触发一个 DatePickerDialog,在 api 22 (Android 5.1) 之前它一直在工作并显示良好,我在上面设置混合和最大日期(最小 = 当前日期,最大 = 从当前日期开始的
我有一个 ListView ,我在其中将标题 View 添加到该列表。一切都很好,但是当滚动列表 headerview 也随着列表移动时,所以我想避免 headerview 滚动,我的意思是当我列表到
虽然我在android上做过一些app,但我还是一头雾水。是否可以使用 SDK 4.0 中的功能,并在 android 2.1 或更低版本上运行该应用程序? 我尝试了你们提到的方法,但出现错误 - F
您好,我正在开发小型 android 应用程序,我想在其中显示带有一些元素的简单 gridview。它工作正常。唯一的问题是即使有空间,它也总是只显示两列。它平均将屏幕分成 2 列并仅显示两个元素。如
我正在使用 Android 2.3.3 API 构建一个应用程序。我需要识别方向的变化并执行一些操作。所以我在 Android Manifest 中添加了以下内容, android:configCha
我正在尝试在“点击”包含特定 MIME 类型的 nfc 标签时开始一项 Activity 。我制作了一个 mime 类型为“text/plain”的标签,并将其添加到 list 中:
我可以将一些数据保存到文件中 val byteArrayOutputStream = ByteArrayOutputStream() byteArrayOutputStream.wri
我正在尝试解析一个包含复杂阿拉伯字母的 XML 文件.. 当我在 android 2.3.7 上测试时,并不是所有的阿拉伯字母都被支持,仍然有一些复杂的显示为方 block .. 但是在 androi
我需要编写一个方法来确定设备是平板电脑还是手机。我不需要根据这个显示不同的用户界面。我只需要有关设备的信息,以便将来我可以将其发送到指标。 在互联网上,我找到了很多方法来确定设备是否是平板电脑。我已经
我正在玩文字转语音,让我的测试应用程序更有趣。它适用于模拟器,但不适用于我的手机,因为我的默认语言环境不是英语。 但是,文本是英文的,所以 tts 当然应该使用英文。据我所知,我可以实现一个自动安装,
我正在使用 MVVM 和整洁的架构编写应用程序。在其中一个屏幕上,我需要使用 pagination 实现 RecyclerView。我将使用库 Paging3。 Android 开发者推荐在存储库层使
这个问题在这里已经有了答案: I lost my .keystore file? (12 个回答) 4年前关闭。 当我以前的操作系统损坏并安装新的(7 月 3 日)时,以前的 android_key_
我正在使用 MVVM 和整洁的架构编写应用程序。在其中一个屏幕上,我需要使用 pagination 实现 RecyclerView。我将使用库 Paging3。 Android 开发者推荐在存储库层使
在我的 v27\style.xml 中,我有以下代码来设置白色导航栏: @color/colorPrimary @color/colorPrimaryDark @color/
我想通过发送电子邮件 startActivity(Intent.createChooser(new Intent(android.content.Intent.ACTION_SEND))) 我知道要将
我实现了一个自定义 ListView ,它看起来像 Twitter 时间线。 adapter = new MyClickableListAdapter(this, R.layout.timeline,
我有一个显示启动画面的自定义对话框; mSplashDialog = new Dialog(MyActivity.this,R.layout.splash); mSplashDialog.setCon
我是一名优秀的程序员,十分优秀!