diff --git a/src/android/src/Garmin.java b/src/android/src/Garmin.java index 00921ab9cb..b961d94e10 100644 --- a/src/android/src/Garmin.java +++ b/src/android/src/Garmin.java @@ -27,6 +27,7 @@ import android.content.BroadcastReceiver; import android.content.ContextWrapper; import android.content.IntentFilter; +import android.os.Handler; import android.widget.Toast; import androidx.core.content.ContextCompat; @@ -165,12 +166,24 @@ private static Context createWrappedContext(Context context) { return new ContextWrapper(context) { private HashMap receiverToWrapper = new HashMap<>(); - @Override - public Intent registerReceiver(final BroadcastReceiver receiver, IntentFilter filter) { - BroadcastReceiver wrappedRecv = new IQMessageReceiverWrapper(receiver); + private BroadcastReceiver wrapReceiver(BroadcastReceiver receiver) { + if (receiver == null) { + return null; + } + synchronized (receiverToWrapper) { - receiverToWrapper.put(receiver, wrappedRecv); + BroadcastReceiver wrappedRecv = receiverToWrapper.get(receiver); + if (wrappedRecv == null) { + wrappedRecv = new IQMessageReceiverWrapper(receiver); + receiverToWrapper.put(receiver, wrappedRecv); + } + return wrappedRecv; } + } + + @Override + public Intent registerReceiver(final BroadcastReceiver receiver, IntentFilter filter) { + BroadcastReceiver wrappedRecv = wrapReceiver(receiver); return ContextCompat.registerReceiver( super.getBaseContext(), wrappedRecv, @@ -179,6 +192,26 @@ public Intent registerReceiver(final BroadcastReceiver receiver, IntentFilter fi ); } + @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, int flags) { + BroadcastReceiver wrappedRecv = wrapReceiver(receiver); + return super.getBaseContext().registerReceiver(wrappedRecv, filter, flags); + } + + @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, + Handler scheduler) { + BroadcastReceiver wrappedRecv = wrapReceiver(receiver); + return super.getBaseContext().registerReceiver(wrappedRecv, filter, broadcastPermission, scheduler); + } + + @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, + Handler scheduler, int flags) { + BroadcastReceiver wrappedRecv = wrapReceiver(receiver); + return super.getBaseContext().registerReceiver(wrappedRecv, filter, broadcastPermission, scheduler, flags); + } + @Override public void unregisterReceiver(BroadcastReceiver receiver) { BroadcastReceiver wrappedReceiver = null; @@ -262,13 +295,17 @@ public void onMessageReceived(IQDevice device, IQApp app, List message, HR = Integer.parseInt(var[0].replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\{", "").replaceAll("\\}", "").replaceAll(" ", "").split("=")[1]); if(var.length > 1) { FootCad = Integer.parseInt(var[1].replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\{", "").replaceAll("\\}", "").replaceAll(" ", "").split("=")[1]); - if(var.length > 2) { - Power = Integer.parseInt(var[1].replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\{", "").replaceAll("\\}", "").replaceAll(" ", "").split("=")[1]); - Speed = Double.parseDouble(var[1].replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\{", "").replaceAll("\\}", "").replaceAll(" ", "").split("=")[1]); - } + } + if(var.length > 2) { + Power = Integer.parseInt(var[2].replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\{", "").replaceAll("\\}", "").replaceAll(" ", "").split("=")[1]); + } + if(var.length > 3) { + Speed = Double.parseDouble(var[3].replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\{", "").replaceAll("\\}", "").replaceAll(" ", "").split("=")[1]); } QLog.d(TAG, "HR " + HR); QLog.d(TAG, "FootCad " + FootCad); + QLog.d(TAG, "Power " + Power); + QLog.d(TAG, "Speed " + Speed); } catch (Exception e) { QLog.e(TAG, "Processing error", e); }