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