无法删除重叠视图 [英] Can't remove overlay view

查看:128
本文介绍了无法删除重叠视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更新

我能解决这个问题, 问题是对话和相关能从广播接收器启动,但不推荐,因为该活动运行View之前结束。

I was able to fix this, The problem was dialogs and related could be initiated from broadcast receiver but not recommended, as the activity running ends before the view.

想实现覆盖像FB的使者,truecaller等。

Trying to implement 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");
                //WindowManager wm = (WindowManager) pcontext.getSystemService(Context.WINDOW_SERVICE);

                if(ly!=null)
                {
                    wm.removeView(ly);
                    ly = null;
                }
            break;
        default:
            break;
        }
        super.onCallStateChanged(state, incomingNumber);
        telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_NONE);
    }


}       
}

在addView工作正常, 这里是日志

The addView works fine, Here is the log

查看未连接到窗口管理器

"View not attached 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

我曾尝试创建布局programmaticaly太.. 但没有运气

I had tried creating the layout programmaticaly too.. but no luck

也想不通生成布局的ID

Also can't figure out the id of the generated layout

推荐答案

但问题是,我们不能使用对话框中的广播接收器,它必须处于可能意图启动另一个活动。

The problem was, we cant use dialogs in broadcast receiver and it has to be in another activity that could be started with intent.

这篇关于无法删除重叠视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆