ada*_*amb 5 android android-vibration android-wear-2.0
当数字发送短信时,我的应用程序应该产生振动。振动应一直持续到用户触摸按钮为止。在测试应用程序时,我正在从不同的设备发送多条短信,包括一条带有选中数字的短信。我总是设法发送文本,这只会停止振动,尽管记录显示振动应该已经开始,但是并没有继续。它可能会在2条消息或40条消息之后随机发生。
我当时在想,设备通知的振动可能会以某种方式干扰我的振动,同时访问该振动Vibrator
。
或因为这是我使用android做的第一件事,所以我做错了。
这是我的AlarmActivity.java
类,它处理振动MainActivity
,当收到新消息时,总是从via Intent 调用它:
public class AlarmActivity extends WearableActivity {
static boolean active = false;
static boolean isVibrating = false;
private Vibrator vibrator;
final long[] mVibratePattern = new long[]{0, 400, 800, 600, 800, 800, 800, 1000};
final int[] mAmplitudes = new int[]{0, 255, 0, 255, 0, 255, 0, 255};
private PowerManager.WakeLock wakeLock;
@Override
public void onResume() {
super.onResume();
active = true;
}
@Override
public void onStart() {
super.onStart();
active = true;
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
"MyWakelockTag");
if ((wakeLock != null) && // we have a WakeLock
(!wakeLock.isHeld())) { // but we don't hold it
wakeLock.acquire();
}
vibrate();
}
@Override
public void onStop() {
super.onStop();
active = false;
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
}
}
@Override
public void onPause() {
super.onPause();
active = false;
if (isVibrating) {
vibrate();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alarm);
findViewById(R.id.stop_button).getBackground().setLevel(5000);
final Button stopButton = findViewById(R.id.stop_button);
stopButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
vibrator.cancel();
isVibrating = false;
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
}
if (isOnline()) {
new SendEmail().execute();
}
Intent myIntent = new Intent(AlarmActivity.this, MainActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
AlarmActivity.this.startActivity(myIntent);
}
});
setAmbientEnabled();
}
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
public void vibrate() {
if (vibrator == null) {
System.out.println("--------- CREATING VIBRATOR ------------");
vibrator = (Vibrator) getApplicationContext().getSystemService(VIBRATOR_SERVICE);
}
vibrator.vibrate(VibrationEffect.createWaveform(mVibratePattern, mAmplitudes, 0)); // 0 to repeat endlessly.
isVibrating = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我cancel()
在vibrate()
再次致电之前也尝试过振动器,但是在从检查的号码中发送了第二个文本而没有按下停止按钮之后,这立即停止了振动。即使我在这两者之间收到了100条消息,我如何简化这一过程,或者确保它能够工作并振动直到用户按下按钮?
归档时间: |
|
查看次数: |
368 次 |
最近记录: |