android - Broadcast receiver in a Fragment -
i have broadcast receiver in fragment, track newly received sms.
private broadcastreceiver smsbroadcastreceiver; intentfilter filter = new intentfilter("android.provider.telephony.sms_received"); @override public void onactivitycreated(@nullable bundle savedinstancestate) { super.onactivitycreated(savedinstancestate); smsbroadcastreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { log.e("smsbroadcastreceiver", "onreceive"); } }; } @override public void onstart() { super.onstart(); localbroadcastmanager.getinstance(getactivity()).registerreceiver(smsbroadcastreceiver, filter); } @override public void onstop() { super.onstop(); localbroadcastmanager.getinstance(getactivity()).unregisterreceiver(smsbroadcastreceiver); }
and permissions in manifest:
<uses-permission android:name="android.permission.receive_sms" /> <uses-permission android:name="android.permission.read_sms" />
the problem never log log.e("smsbroadcastreceiver", "onreceive");
sms while receiver still registered.
however if write receiver separate class , put in manifest, it's onreceive() called.
did miss something?
did miss something?
ya missing 1 point object life span. when register broadcast receiver in fragment receiver object alive till fragment exist. when fragment destroyed receiver unregistered. when ever fragment alive broadcast otherwise won't work. receive broadcast when app not in foreground have register broadcast in manifest file.
update
try this
intentfilter filter = new intentfilter("android.provider.telephony.sms_received"); private broadcastreceiver smsbroadcastreceiver=new broadcastreceiver() { @override public void onreceive(context context, intent intent) { log.e("smsbroadcastreceiver", "onreceive"); } };
and register receiver like
getactivity().registerreceiver(smsbroadcastreceiver, filter);
and unregister like
getactivity().unregisterreceiver(smsbroadcastreceiver);
Comments
Post a Comment