首页 文章

Watch Face不能与可穿戴设备同步

提问于
浏览
0

我正在开发一块表盘 . 该项目包括表面和手持应用程序,以报告移动电池 . 没有真正的伴侣应用程序 - 应用程序甚至隐藏在抽屉里 . 我遇到的问题是,当我在手机上安装应用程序时,脸部未在 Watch 上同步 . 我几乎遵守了我在互联网上发现的一切:

  • 这个apk是由Android Studio生成的 - 发布版本,已签名,穿戴应用程序位于res / raw文件夹中 .

  • 移动和磨损应用的权限相同 .

  • 正确设置了依赖项 .

  • APK通过ADB安装,Watch应用程序强制同步...

值得一提的是,移动应用程序没有活动或其他东西 . 所以没有办法手动启动它 .

有什么我想念的吗?从我的角度来看,没有理由不去工作......

Mobile Manifest

<?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>

Mobile 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']

    }

Wear Manifest

<?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>

Wear 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样本紧密匹配......我只是绝望了 .

4 回答

  • 0

    检查手机中是否具有相同的权限集并观察清单文件 . 这是我在同样情况下的原因 .

  • 0

    你的磨损清单中有这个:

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

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

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

  • 0

    我从 Wear 清单中删除了那些2:

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

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

    谢谢您的帮助!

  • 0

    在您的移动平台中...您需要包含此...

    dependencies {
        wearApp project(':Wearable')
    

相关问题