Update
I was able to fix this. The problem was that the dialogs and related can be initiated from the broadcast receiver, but it is not recommended, as the work ends before the presentation.
Trying to implement an overlay like fb messenger, truecaller etc.
public class IncomingCall extends BroadcastReceiver { private Context pcontext; private static final String TAG = "CustomBroadcastReceiver"; TelephonyManager telephony; CustomPhoneStateListener customPhoneListener ; @Override public void onReceive(Context context, Intent intent) { pcontext = context; Bundle extras = intent.getExtras(); if (extras != null) { String state = extras.getString(TelephonyManager.EXTRA_STATE); Log.w("DEBUG", state); telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); customPhoneListener = new CustomPhoneStateListener(); telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); Bundle bundle = intent.getExtras(); String phoneNr= bundle.getString("incoming_number"); } } public class CustomPhoneStateListener extends PhoneStateListener { private static final String TAG = "CustomPhoneStateListener"; Handler handler=new Handler(); @Override public void onCallStateChanged(int state, String incomingNumber) { WindowManager wm = (WindowManager) pcontext.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT); params.height = LayoutParams.MATCH_PARENT; params.width = LayoutParams.MATCH_PARENT; params.format = PixelFormat.TRANSLUCENT; params.gravity = Gravity.BOTTOM; RelativeLayout ly; final LayoutInflater inflater = (LayoutInflater) pcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ly = (RelativeLayout) inflater.inflate(R.layout.dialog, null); switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.d("Call","RINGING"); wm.addView(ly, params); break; case TelephonyManager.CALL_STATE_IDLE: Log.d("Call","End");
addView works fine, here is the log
"View not connected to window manager"
08-24 20:05:56.404: W/DEBUG(28001): IDLE 08-24 20:05:56.424: D/Call(28001): End 08-24 20:05:56.424: D/AndroidRuntime(28001): Shutting down VM 08-24 20:05:56.424: W/dalvikvm(28001): threadid=1: thread exiting with uncaught exception (group=0x412982a0) 08-24 20:05:56.444: E/AndroidRuntime(28001): FATAL EXCEPTION: main 08-24 20:05:56.444: E/AndroidRuntime(28001): java.lang.IllegalArgumentException: View not attached to window manager 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:673) 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:369) 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:160) 08-24 20:05:56.444: E/AndroidRuntime(28001): at com.androidexample.broadcastreceiver.IncomingCall$CustomPhoneStateListener.onCallStateChanged(IncomingCall.java:105) 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:393) 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.os.Handler.dispatchMessage(Handler.java:99) 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.os.Looper.loop(Looper.java:137) 08-24 20:05:56.444: E/AndroidRuntime(28001): at android.app.ActivityThread.main(ActivityThread.java:4898) 08-24 20:05:56.444: E/AndroidRuntime(28001): at java.lang.reflect.Method.invokeNative(Native Method) 08-24 20:05:56.444: E/AndroidRuntime(28001): at java.lang.reflect.Method.invoke(Method.java:511) 08-24 20:05:56.444: E/AndroidRuntime(28001): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008) 08-24 20:05:56.444: E/AndroidRuntime(28001): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) 08-24 20:05:56.444: E/AndroidRuntime(28001): at dalvik.system.NativeStart.main(Native Method) 08-24 20:08:22.669: I/Process(28001): Sending signal. PID: 28001 SIG: 9
I also tried to create a mock program. but no luck
It is also not possible to determine the identifier of the generated layout.
source share