• Android在任意窗口前弹出rss更新提醒对话框 之二


    在之前处理过一个问题在任意窗口前弹出rss更新提醒对话框,如下页面:
    http://www.cnblogs.com/sipher/articles/2502092.html

    利用上面的方法可以弹出窗口,不过没有办法在窗口中启动一个activity。

    于是最近看有没有其他办法可以实现,想到在alertDialog中无法启动,那就还是弹出一个activity模拟窗口,再在其中启动activity。

    代码如下:

    private void showRssUpateRemindDialog() {
        view = View.inflate(getApplicationContext(),
                    R.layout.rss_update_remind, null);
        // Show only 10 if the updated rss are morn than 10
        int rssUpdateCount = 0;
        String rssUpdateCountStr = "";
         ......
        // set the count of the updated rss
        TextView rssCount = (TextView) view.findViewById(R.id.rss_update_count);
        rssCount.setText(rssUpdateCountStr);
        TextView rssUpdateTitleAll = (TextView) view
                    .findViewById(R.id.rss_upate_title_all);
        rssUpdateTitleAll.setText(rssUpateTitleAll.toString());
        view.findViewById(R.id.btn_rss_remind_ok).setOnClickListener(new OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    Bundle bundle = new Bundle();
                         ......
                    intent.putExtras(bundle);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setClass(getApplicationContext(),
                            xxxxActivity.class);
                    
                    startActivity(intent);
                    mWm.removeView(view);
                }
            });
         view.findViewById(R.id.btn_rss_remind_cancel).setOnClickListener(new OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    mWm.removeView(view);
                }
            });
        mWm=(WindowManager)getApplicationContext().getSystemService("window");  
        WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();  
        wmParams.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        wmParams.width=600;
        wmParams.height=400;
        wmParams.alpha = 10;
        mWm.addView(view, wmParams);
    }

    这样同样实现了和之前一样的效果,除了窗体格式需要再调整之外。
    可是,虽然可以弹出窗体,不过点击窗体中的按钮,在某些位置,譬如andoid桌面,web浏览器前,无法开启一个新的activity。
    调试后发现,按钮的onClick事件虽然执行,不过没有办法叫起新的activity。
    于是,修改 startActivity(intent); ----> getApplicationContext().startActivity(intent);
    成功开启新的activity!!!虽然可以作为一个替代方案,不过仍然不是我理想中的效果。
    A activity中可以打开B activity,现在要在任意位置弹出一个窗体,按其中的按钮,呼叫出B activity。
    利用上面的方法,会同时打开A activity和B activity两个。
    不知道有没有什么办法可以解决呢?(上面的修改,用在之前打开AlertDialog方式中也是同样效果。)
    ---------------------------------------------------------------------------------------
    在查资料中,试验出如下方法可以查看是否在当前home开启应用程式

    ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);  
            List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(30);
            String pg = new String();
            for (int i =0; i< rti.size(); i++) {
                pg = rti.get(i).baseActivity.getPackageName();
                if (pg.equals("com.android.launcher")) {
                    break;
                }
                if (pg.equals("com.xxxx.home")) {
                    break;
                }
            }
    //------------------------------------------------------------------------
    绝对的意外发现!!!!!!
    因为在使用getApplicationContext().startActivity(intent);打开B activity时,
    必须要添加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);,这样就会重复打开B activity。
    为了解决这个问题,在AndroidManifest.xml中B activity中添加这句:android:launchMode="singleInstance",
    发现B activity不会重复打开,同时意外发现,
    当在A activity外呼叫B activity时,A activity不会打开只是开启了B activity!!!!!!!
    但不明白为何,哪位高人帮忙解释下。
  • 相关阅读:
    动态规划精讲(一)53. 最大子序和
    ACM计算几何总结
    三角形外心的坐标公式
    三角形外心的坐标公式
    高精度模板
    位运算模板
    同余定理与逆元
    扩展欧几里得算法求二元一次方程
    1004. 最大连续1的个数 III
    剑指 Offer 04. 二维数组中的查找
  • 原文地址:https://www.cnblogs.com/sipher/p/2585811.html
Copyright © 2020-2023  润新知