Watch Face 未与可穿戴设备同步

Watch Face is not syncing to wearable

我正在开发表盘。该项目由表盘和手持应用程序组成,用于报告手机电池。没有实际的配套应用程序——该应用程序甚至隐藏在抽屉中。 我遇到的问题是,当我在 phone 上安装应用程序时,面部未在手表上同步。 我几乎遵守我在互联网上找到的所有内容:

  1. apk由Android Studio生成 - 发行版,已签名,wear app在res/raw文件夹中。
  2. 移动应用和穿戴应用的权限相同。
  3. 依赖项设置正确。
  4. APK 通过 ADB 安装,Watch 应用程序被强制同步...

值得一提的是,移动应用程序没有 activity 之类的东西。所以没办法手动启动。

有什么我遗漏的吗?在我看来,没有理由不工作......

手机清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="name.name" >

    <uses-sdk android:minSdkVersion="18"
        android:targetSdkVersion="21" />

    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.SET_TIME_ZONE"/>
    <uses-permission android:name="android.permission.BATTERY_STATS"/>
    <uses-permission android:name="android.permission.READ_CALENDAR"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" >
        <!--android:theme="@style/AppTheme" >-->

        <service android:name="name.name.BatteryListener"
            android:permission="android.permission.BIND_WALLPAPER" >>

            <intent-filter>
                <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
                <category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>

        <meta-data android:name="com.google.android.wearable.beta.app"
            android:resource="@xml/wearable_app_desc"/>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

    </application>

</manifest>

手机Gradle:

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

apply plugin: 'com.android.application'

repositories {
    jcenter()
}

dependencies {
    compile "com.android.support:support-v4:21.0.2"
    compile "com.android.support:support-v13:21.0.2"
    compile "com.android.support:cardview-v7:21.0.2"
    compile "com.google.android.support:wearable:1.1.+"
    compile 'com.google.android.gms:play-services-wearable:6.5.+'
    compile 'com.android.support:support-v13:21.0.+'

}

// The sample build uses multiple directories to
// keep boilerplate and common code separate from
// the main sample code.
List<String> dirs = [
        'main',     // main sample code; look here for the interesting stuff.
        'common',   // components that are reused by multiple samples
        'template'] // boilerplate code that is generated by the sample template process

android {
    compileSdkVersion 21
    buildToolsVersion "20"

    defaultConfig {
        applicationId "name.name"
        minSdkVersion 18
        targetSdkVersion 21
    }

    sourceSets {
        main {
            dirs.each { dir ->
                java.srcDirs "src/${dir}/java"
                res.srcDirs "src/${dir}/res"
            }
        }
        androidTest.setRoot('tests')
        androidTest.java.srcDirs = ['tests/src']

    }

佩戴清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="qualiss.qualissfacewatch" >

    <uses-sdk android:minSdkVersion="21"
        android:targetSdkVersion="21" />

    <uses-feature android:name="android.hardware.type.watch" />

    <!-- Required to act as a custom watch face. -->
    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.SET_TIME_ZONE"/>
    <uses-permission android:name="android.permission.BATTERY_STATS"/>
    <uses-permission android:name="android.permission.READ_CALENDAR"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.DeviceDefault">

        <service
            android:name="name.name.MyWatchFace"
            android:label="Name"
            android:permission="android.permission.BIND_WALLPAPER" >
            <meta-data
                android:name="android.service.wallpaper"
                android:resource="@xml/watch_face" />
            <meta-data
                android:name="com.google.android.wearable.watchface.preview"
                android:resource="@drawable/preview_square"/>
            <meta-data
                android:name="com.google.android.wearable.watchface.preview_circular"
                android:resource="@drawable/preview_circle" />
            <meta-data
                android:name="com.google.android.wearable.watchface.companionConfigurationAction"
                android:value="com.example.android.wearable.watchface.CONFIG_ANALOG" />

            <intent-filter>
                <action android:name="android.service.wallpaper.WallpaperService" />
                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
                <category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </service>

        <service android:name="name.name.BatteryActivity">
            <intent-filter>
                <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
                <category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

    </application>

</manifest>

穿Gradle:

}
buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

apply plugin: 'com.android.application'



dependencies {


    compile 'com.google.android.gms:play-services-wearable:6.5.+'
    compile 'com.android.support:support-v13:21.0.+'
    compile 'com.google.android.support:wearable:1.1.+'
    compile 'com.google.android.support:wearable:1.1.0'
}

// The sample build uses multiple directories to
// keep boilerplate and common code separate from
// the main sample code.
List<String> dirs = [
        'main',     // main sample code; look here for the interesting stuff.
        'common',   // components that are reused by multiple samples
        'template'] // boilerplate code that is generated by the sample template process

android {
    compileSdkVersion 21

    buildToolsVersion "20"

    defaultConfig {
        applicationId "name.name"
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
    sourceSets {
        main {
            dirs.each { dir ->
                java.srcDirs "src/${dir}/java"
                res.srcDirs "src/${dir}/res"
            }
        }
        androidTest.setRoot('tests')
        androidTest.java.srcDirs = ['tests/src']

    }
}
}

两个 Gradle 文件都与 Android Watch Face 样本非常匹配......我只是绝望了。

检查您在 phone 中是否拥有相同的权限集并观看清单文件。这就是我处于同样情况的原因。

您的 Wear 清单中有这个:

<meta-data
            android:name="com.google.android.wearable.watchface.companionConfigurationAction"
            android:value="com.example.android.wearable.watchface.CONFIG_ANALOG" />

这看起来像是示例代码遗留下来的,很可能指向您的移动应用中不存在的 Activity。这很可能会导致部署表盘出现问题。

尝试删除它,看看是否有帮助。

我已经从 Wear 清单中删除了那两个:

< uses-permission android:name="android.permission.SET_TIME_ZONE"/>
< uses-permission android:name="android.permission.BATTERY_STATS"/>

对我来说,正确的权限程序似乎不应该是在手机和 wear 清单中具有相同的权限,而是在手机中继承 wear 权限,而不是(也)反之亦然。

感谢您的帮助!

在您的手机中 gradle...您需要添加此...

dependencies {
    wearApp project(':Wearable')