0

我最近在玩我的三星 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" />

定义智能手表应用程序将与安卓应用程序分开安装。更改CompanionIntegrated一个后,表示智能手表应用程序已集成,并将与 android 提供商应用程序一起安装。

4

1 回答 1

0

跟随

于 2017-02-20T11:37:49.327 回答