我最近在玩我的三星 Gear 2(不是S2)智能手表,我为它创建了一个新的表盘。我想在上面显示天气信息,我发现对于该任务我需要使用三星附件协议(SAP)。
我按照三星教程创建了一个演示应用程序来学习如何使用SAP。
我在将 Tizen 应用程序部署到手表时遇到了问题,但我发现当前(2017 年)可用的最低 API 是 2.3.1,而 Gear 2 Smartwatch 有 2.2。在config.xml中更改后
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.3.1"/>
至
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>
我的应用程序已部署。
我创建了一个证书来构建一个签名wgt
包。
我还根据教程创建了一个 android 提供程序应用程序。添加了新证书并创建了一个签名的apk
.
我将它复制apk
到三星 Galaxy S3 手机并尝试安装它。安装结束没有任何问题。但是,几秒钟后或当我尝试从手表初始化通信时,我从 Gear Manager 获得“未知来源”信息,并且我的应用程序被删除。
我已经在 android、Gear Manager 中检查了“允许未知来源”,并允许在智能手表上进行 USB 调试(因为这是我在这里的第一个问题,我不允许发布超过 2 个链接,所以我必须提供一个包含所有屏幕截图的链接在那里,对不起)。
为什么我的应用程序被删除,我应该怎么做才能让它正常工作。
Tizen 应用程序 - 消费者
使用 Tizen Studio 1.1.0 构建。
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/SimpleSAPConsumer" version="1.0.0" viewmodes="maximized">
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>
<content src="index.html"/>
<feature name="http://tizen.org/feature/screen.size.all"/>
<icon src="icon.png"/>
<tizen:metadata key="AccessoryServiceLocation" value="res/xml/accessoryservices.xml"/>
<name>SimpleSAPConsumer</name>
<tizen:privilege name="http://developer.samsung.com/privilege/accessoryprotocol"/>
<tizen:profile name="wearable"/>
</widget>
附件服务.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<application name="HelloAccessoryConsumers">
<serviceProfile role="consumer" name="sapsample" version="1.0" id="/sample/hello">
<supportedTransports>
<transport type="TRANSPORT_BT"/>
<transport type="TRANSPORT_WIFI"/>
</supportedTransports>
<serviceChannel id="123" reliability="enable" priority="low" dataRate="low"> </serviceChannel>
</serviceProfile>
</application>
</resources>
如果需要,我可以提供其余的 Tizen 代码(main.js、index.html)。现在我认为这对我面临的问题没有任何价值。
Android 应用 - 提供者
使用 Android Studio 2.2.3 结构构建:
app
->assets
-->SimpleSapConsumer.wgt
->libs
-->accessory-v2.5.0.jar
-->sdk-1.0.0.jar
->src
-->main
--->java
---->com.sap.baks.sapapp.service
----->SapServiceProvider.java
--->res
---->xml
----->sapservice.xml
---->AndroidManifest.xml
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sap.baks.sapapp">
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK"/>
<uses-permission android:name="com.samsung.wmanager.APP"/>
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service android:name=".service.SAPServiceProvider">
</service>
<receiver android:name="com.samsung.android.sdk.accessory.RegisterUponInstallReceiver" >
<intent-filter>
<action android:name="com.samsung.accessory.action.REGISTER_AGENT" />
</intent-filter>
</receiver>
<receiver android:name="com.samsung.android.sdk.accessory.ServiceConnectionIndicationBroadcastReceiver" >
<intent-filter>
<action android:name="com.samsung.accessory.action.SERVICE_CONNECTION_REQUESTED" />
</intent-filter>
</receiver>
<meta-data
android:name="AccessoryServicesLocation"
android:value="/res/xml/sapservices.xml" />
<meta-data
android:name="GearAppType"
android:value="wgt" />
</application>
</manifest>
sapservice.xml
<resources>
<application name="SAPapp">
<serviceProfile
id="/system/sapsample"
name="sapsample"
role="provider"
serviceImpl="com.sap.baks.sapapp.service.SAPServiceProvider"
version="1.0"
serviceLimit="ANY"
serviceTimeout="10">
<supportedTransports>
<transport type="TRANSPORT_BT"/>
<transport type="TRANSPORT_WIFI" />
</supportedTransports>
<serviceChannel
id="123"
dataRate="low"
priority="low"
reliability="enable"/>
</serviceProfile>
</application>
</resources>
sapserviceprovider.java
我把它和截图放在一起,因为它很长。
******** 编辑 **********
在尝试按照@Iqbal 的建议安装示例应用程序后,我得到了以下结果:
蒂岑
在将 API 更改为 2.2 之前,我无法在手表上安装应用程序。如果 API 更大,我会看到以下错误:
[Initializing the launch environment...]
RDS: On
Target information: SM-R380
Application information: Id(VbsgE6bms2.HelloAccessoryConsumer), Package Name(VbsgE6bms2), Project Name(HelloAccessoryConsumer)
[Transferring the package...]
Transferred the package: wgt stream -> /opt/usr/apps/tmp/HelloAccessoryConsumer.wgt
[Installing the package...]
path is /opt/usr/apps/tmp/HelloAccessoryConsumer.wgt
start process (install)
....
error : 61
end process (fail)
processing result : FATAL_ERROR [61] failed
spend time for pkgcmd is [1537]ms
cmd_ret:61
An exception occurred
(Installing the package... > Fail)
An exception occurred
Unexpected stop progress...
(8.239 sec)
摘要:我已经使用 API 2.2 安装了应用程序,并且没有进行其他更改。
安卓
在不更改任何内容的情况下使用示例应用程序,我能够运行它并连接到智能手表!玉皮:)!
但是我需要知道为什么我第一次使用的代码是错误的,即使我是从三星教程和网站上得到的。
我发现只有在AndroidManifest.xml中有这些行时才会卸载应用程序
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK"/>
<uses-permission android:name="com.samsung.wmanager.APP"/>
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION"/>
如果我将上面的行替换为下面的行
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION" />
一切都很好。
有人可以解释一下为什么会这样吗?
********** 编辑 2 **********
对于那些将在以前的编辑中搜索问题答案的人。我在这里找到了
长话短说:
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
是必须呈现的行 - 否则应用程序将从 android 设备中删除。老实说,我在任何文档中都没有发现这一点。
而且,
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
定义智能手表应用程序将与安卓应用程序分开安装。更改Companion
为Integrated
一个后,表示智能手表应用程序已集成,并将与 android 提供商应用程序一起安装。