问题描述
我正在开发一个需要实现可穿戴应用程序的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 (将#修改为@)