Ich habe SMS_RECIEVED
broadcastreceiver
in CustomWebView registriert. Ich habe mich um die Registrierung und Aufhebung der Registrierung des Empfängers im Lebenszyklus der Aktivität gekümmert. Alles funktioniert gut, bis sich die Ausrichtung ändert.IntentReciever Leck bei Orientierungsänderung
Ich habe versucht Platzierung Register/unregister Empfänger unter verschiedenen Zuständen der Webansicht wie onAttachedToWindow()
/onDetachedFromWindow()
, onPause()
/onResume()
(hiermit ausdrücklich von Aktivität des onPause()
/onResume()
Aufruf), onStart()
/onStop()
. Aber nichts scheint IntentReceiver
Leck bei Orientierungsänderung zu verhindern.
Hier ist der Code, den ich versucht habe:
CustomWebView.java
public class CustomWebView extends WebView {
BroadcastReceiver reciver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
Log.v(tag, "Got PDUS Obj [" + pdusObj + "]");
}
}
} catch (Exception e) {
Log.e(tag, "Exception smsReceiver" + e);
}
}
};
--------------------
--------------------
some code
--------------------
@Override
public void onResume() {
try {
IntentFilter intents = new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED");
getContext().registerReceiver(reciver, intents);
Log.i(tag, "Webview sms reciever registered");
} catch (Exception e) {
e.printStackTrace();
}
super.onResume();
}
@Override
public void onPause() {
try {
getContext().unregisterReceiver(reciver);
Log.i(tag, "Webview sms reciever unregistered");
} catch (Exception e) {
e.printStackTrace();
}
super.onPause();
}
// Tried this one too
/* @Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
Log.i(tag, "Billdesk onAttach to window called");
try {
IntentFilter intents = new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED");
getContext().registerReceiver(reciver, intents);
Log.i(tag, "Webview sms reciever registered");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
Log.i(tag, "Billdesk onDetach From window to window called");
try {
getContext().unregisterReceiver(reciver);
Log.i(tag, "Webview sms reciever unregistered");
} catch (Exception e) {
e.printStackTrace();
}
} */
}
MainActivity.java
public class MainActivity extends FragmentActivity{
-----------
-----------
-----------
@Override
protected void onPause() {
if (this.customWebView != null)
this.customWebView.onPause();
super.onPause();
}
@Override
protected void onResume() {
if (this.customWebView != null)
this.customWebView.onResume();
super.onResume();
}
}
ich folgende Fehlermeldung erhalten, wenn, wird Ausrichtung geändert:
Activity com.abcd.xyz.ActivityClass has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
Vielen Dank im Voraus.
Bei welcher Linie bekommen Problem? –
Warum erstellen Sie keine Methoden wie registerReceiver/unregisterReceiver in CustomWebView und rufen sie dann von übergeordneten onResume/onPause ... ist auch der CustomWebView Teil der Aktivität Layout oder Fragment Layout? – Selvin
@ ρяσѕρєяK Ich bekomme den Fehler beim Aufruf von getContext(). RegisterReceiver (reciver, Intents); auf CustomWebView nach der Orientierung Änderung – Bhupesh