Android在任意視窗前彈出rss更新提醒對話方塊 之二

來源:互聯網
上載者:User

在之前處理過一個問題在任意視窗前彈出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!!!!!!!
但不明白為何,哪位高人幫忙解釋下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.