android应用程序与可穿戴伴侣应用程序之间的同步振动

问题描述

我正在开发一个需要实现可穿戴应用程序的android应用程序。我需要设备以同步方式振动,但出现问题。首次启动时,智能手表会延迟近半秒钟开始振动。一旦停止并重新启动振动,如果在短时间内完成振动,则振动是同步的,如果等待4-5秒,则问题会再次发生。 这是我的代码

MainActivity Wear

package com.example.progettogio;

import android.os.Bundle;
import android.os.PowerManager;
import android.support.wearable.activity.WearableActivity;
import android.util.Log;
import android.widget.TextView;

import com.example.progettogio.vibration.soundVibrationThread;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.wearable.CapabilityClient;
import com.google.android.gms.wearable.CapabilityInfo;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.Wearable;

import java.util.Set;

public class MainActivity extends WearableActivity {

    private TextView mTextView;
    private Set<Node> nodes;
    private String text = "Paired with:\n";
    private SoundVibrationThread mSoundVibrationThread;
    private PowerManager.WakeLock mWakeLock;
    private PowerManager mPowerManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
        mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"SignalsServer::SensorsWakeLock");
        mWakeLock.acquire();
        mTextView = (TextView) findViewById(R.id.text);
        //Wear
        Task<CapabilityInfo> capabilityInfoTask = Wearable.getCapabilityClient(getApplicationContext())
                .getCapability("watch_server",CapabilityClient.FILTER_REACHABLE);

        capabilityInfoTask.addOnCompleteListener(new OnCompleteListener<CapabilityInfo>() {
            @Override
            public void onComplete(Task<CapabilityInfo> task) {
                if (task.isSuccessful()) {
                    CapabilityInfo capabilityInfo = task.getResult();
                    nodes = capabilityInfo.getNodes();
                    for (Node node : nodes)
                        text += node.getdisplayName() + "\n";
                    mTextView.setText(text);
                } else {
                    Log.d("MainActivityWear","Capability request Failed to return any results.");
                }

            }
        });

        Wearable.getMessageClient(getApplicationContext()).addListener((messageEvent) -> {
            vibrate(new String(messageEvent.getData()));
        });

        // Enables Always-on
        setAmbientEnabled();
    }


    public void vibrate(String message) {
        if (!message.equals("STOP")) {
            if (mWakeLock != null)
                mWakeLock.acquire(5 * 60 * 1000);
            int bpm = Integer.parseInt(message);
            mSoundVibrationThread = new SoundVibrationThread(getApplicationContext(),bpm);
            mSoundVibrationThread.start();
        } else if (mSoundVibrationThread != null) {
            mSoundVibrationThread.end();
            if (mWakeLock != null)
                if (mWakeLock.isHeld())
                    mWakeLock.release();
        }
    }
}

Gradle文件磨损

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId "com.example.nordicthingyserver"
        minSdkVersion 26
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
}

dependencies {
    implementation filetree(dir: 'libs',include: ['*.jar'])

    //noinspection GradleCompatible
    implementation 'com.google.android.support:wearable:2.7.0'
    implementation 'com.google.android.gms:play-services-wearable:17.0.0'
    implementation 'androidx.percentlayout:percentlayout:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'androidx.wear:wear:1.0.0'
    implementation 'junit:junit:4.13'
    implementation 'androidx.test:monitor:1.3.0'
    testImplementation 'org.testng:testng:6.9.6'
    compileOnly 'com.google.android.wearable:wearable:2.7.0'
}

负责在智能手机应用上启动振动的按钮的OnClickListener

 soundVibrationButton.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(soundVibrationOn){
                    mSoundVibrationThread.end();
                    soundVibrationOn=false;
                    if(smartWatchConnected){
                        for (Node node : nodes)
                            Wearable.getMessageClient(getApplicationContext()).sendMessage(
                                    node.getId(),"/stop","STOP".getBytes());
                    }
                }
                else {
                    if(smartWatchConnected){
                        if (nodes != null) {
                            for (Node node : nodes)
                                Wearable.getMessageClient(getApplicationContext()).sendMessage(
                                        node.getId(),"/vibration","30".getBytes());
                        }
                    }
                    mSoundVibrationThread = new SoundVibrationThread(getApplicationContext(),true,30);
                    mSoundVibrationThread.start();

                    soundVibrationOn=true;
                }
            }
        });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...