@@ -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