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!!!!!!!
但不明白为何,哪位高人帮忙解释下。
posted @ 2012-07-11 10:29  日光之下无新事  阅读(1044)  评论(1编辑  收藏  举报