Недавно я играл со своими умными часами Samsung Gear 2 (не S2) и создал для них новый циферблат. Я хотел бы показать на нем информацию о погоде, и я обнаружил, что для этой задачи мне нужно использовать Samsung Accessory Protocol (SAP).
Я следил за учебным пособием Samsung, чтобы создать демонстрационное приложение, чтобы узнать, как использовать 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"/>
to
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>
мое приложение было развернуто.
Я создал сертификат для создания подписанного пакета wgt
.
Я также создал приложение поставщика Android в соответствии с руководством. Добавил новый сертификат и создал подписанный apk
.
Я скопировал apk
на телефон Samsung Galaxy S3 и попытался установить его. Установка завершилась без проблем. Однако через несколько секунд или при попытке инициализировать связь с часами я получаю информацию "Неизвестные источники" от Gear Manager, и мое приложение удаляется.
Я уже проверил «Разрешить неизвестные источники» в Android, Gear Manager и разрешил отладку по USB на умных часах (потому что это мой первый вопрос здесь, мне не разрешено публиковать более 2 ссылок, поэтому мне пришлось дать одна ссылка со всеми скриншотами, извините).
Почему мое приложение удаляется и что мне делать, чтобы оно работало корректно.
Приложение Tizen — потребительское
Сборка с использованием Tizen Studio 1.1.0.
config.xml
<?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 и никаких других изменений не делал.
Андроид
Используя пример приложения, ничего не меняя, я смог запустить его и подключиться к умным часам! Юпи :) !
Но мне нужно было знать, почему код, который я использовал в первый раз, был неправильным, даже если я получил его из учебника и веб-сайта Samsung.
Я обнаружил, что приложение удаляется, только если у меня есть эти строки в 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" />
определяет, что приложение для умных часов будет установлено отдельно от приложения для Android. После изменения Companion
на Integrated
сообщается, что приложение SmartWatch интегрировано и будет установлено с приложением поставщика Android.