Skip to content

Commit 8538dd7

Browse files
committed
Update broadcastReceiver
1 parent be3de2e commit 8538dd7

File tree

1 file changed

+29
-8
lines changed

1 file changed

+29
-8
lines changed

pythonforandroid/recipes/android/src/android/broadcast.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@ def onReceive(self, context, intent):
2222
def __init__(self, callback, actions=None, categories=None):
2323
super().__init__()
2424
self.callback = callback
25+
self._is_registered = False
2526

2627
if not actions and not categories:
2728
raise Exception('You need to define at least actions or categories')
2829

2930
def _expand_partial_name(partial_name):
3031
if '.' in partial_name:
3132
return partial_name # Its actually a full dotted name
32-
else:
33-
name = 'ACTION_{}'.format(partial_name.upper())
34-
if not hasattr(Intent, name):
35-
raise Exception('The intent {} does not exist'.format(name))
36-
return getattr(Intent, name)
33+
name = 'ACTION_{}'.format(partial_name.upper())
34+
if not hasattr(Intent, name):
35+
raise Exception('The intent {} does not exist'.format(name))
36+
return getattr(Intent, name)
3737

3838
# resolve actions/categories first
3939
Intent = autoclass('android.content.Intent')
@@ -58,15 +58,36 @@ def _expand_partial_name(partial_name):
5858
self.receiver_filter.addCategory(x)
5959

6060
def start(self):
61-
Handler = autoclass('android.os.Handler')
61+
62+
if hasattr(self, 'handlerthread') and self.handlerthread.isAlive():
63+
print("HandlerThread already running, skipping start")
64+
return
65+
66+
HandlerThread = autoclass('android.os.HandlerThread')
67+
self.handlerthread = HandlerThread('handlerthread')
6268
self.handlerthread.start()
69+
70+
if self._is_registered:
71+
print("[BroadcastReceiver] Already registered.")
72+
return
73+
74+
Handler = autoclass('android.os.Handler')
6375
self.handler = Handler(self.handlerthread.getLooper())
6476
self.context.registerReceiver(
6577
self.receiver, self.receiver_filter, None, self.handler)
78+
self._is_registered = True
6679

6780
def stop(self):
68-
self.context.unregisterReceiver(self.receiver)
69-
self.handlerthread.quit()
81+
try:
82+
self.context.unregisterReceiver(self.receiver)
83+
self._is_registered = False
84+
except Exception as e:
85+
print("[BroadcastReceiver] unregisterReceiver failed:", e)
86+
87+
if hasattr(self, 'handlerthread'):
88+
self.handlerthread.quitSafely()
89+
self.handlerthread = None
90+
self.handler = None
7091

7192
@property
7293
def context(self):

0 commit comments

Comments
 (0)