这是indexloc提供的服务,不要输入任何密码
Skip to content

Commit 956e20e

Browse files
Fixed: Fix NullPointerException when running bell/vibrate on Samsung devices on android 8 and handled deprecated code
Apparently occurs on only Samsung android 8 devices and there is no fix for vibrator except catching the exception so that app doesn't crash. https://gitlab.com/juanitobananas/wave-up/-/issues/131 overbound/SonicTimeTwisted#131 https://web.archive.org/web/20201114040257/https://www.badlogicgames.com/forum/viewtopic.php?t=28507 ``` java.lang.NullPointerException: Attempt to read from field 'android.os.VibrationEffect com.android.server.VibratorService$Vibration.mEffect' on a null object reference at android.os.Parcel.readException(Parcel.java:2035) at android.os.Parcel.readException(Parcel.java:1975) at android.os.IVibratorService$Stub$Proxy.vibrate(IVibratorService.java:292) at android.os.SystemVibrator.vibrate(SystemVibrator.java:81) at android.os.Vibrator.vibrate(Vibrator.java:191) at android.os.Vibrator.vibrate(Vibrator.java:110) at android.os.Vibrator.vibrate(Vibrator.java:89) at com.termux.app.terminal.io.BellHandler$1.run(BellHandler.java:37) at com.termux.app.terminal.io.BellHandler.doBell(BellHandler.java:55) at com.termux.app.terminal.TermuxTerminalSessionClient.onBell(TermuxTerminalSessionClient.java:178) at com.termux.terminal.TerminalSession.onBell(TerminalSession.java:278) ```
1 parent 10704b1 commit 956e20e

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

app/src/main/java/com/termux/app/terminal/io/BellHandler.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package com.termux.app.terminal.io;
22

33
import android.content.Context;
4+
import android.os.Build;
45
import android.os.Handler;
56
import android.os.Looper;
67
import android.os.SystemClock;
8+
import android.os.VibrationEffect;
79
import android.os.Vibrator;
810

11+
import com.termux.shared.logger.Logger;
12+
913
public class BellHandler {
1014
private static BellHandler instance = null;
1115
private static final Object lock = new Object();
1216

17+
private static final String LOG_TAG = "BellHandler";
18+
1319
public static BellHandler getInstance(Context context) {
1420
if (instance == null) {
1521
synchronized (lock) {
@@ -34,7 +40,17 @@ private BellHandler(final Vibrator vibrator) {
3440
@Override
3541
public void run() {
3642
if (vibrator != null) {
37-
vibrator.vibrate(DURATION);
43+
try {
44+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
45+
vibrator.vibrate(VibrationEffect.createOneShot(DURATION, VibrationEffect.DEFAULT_AMPLITUDE));
46+
} else {
47+
vibrator.vibrate(DURATION);
48+
}
49+
} catch (Exception e) {
50+
// Issue on samsung devices on android 8
51+
// java.lang.NullPointerException: Attempt to read from field 'android.os.VibrationEffect com.android.server.VibratorService$Vibration.mEffect' on a null object reference
52+
Logger.logStackTraceWithMessage(LOG_TAG, "Failed to run vibrator", e);
53+
}
3854
}
3955
}
4056
};

0 commit comments

Comments
 (0)