android使用主流瀏覽器打開網頁,無需彈出選擇。

首先說一下開發需求,需要使用主流的瀏覽器打開網頁,比如QQ瀏覽器,UC瀏覽器,opera瀏覽器,如果此手機裏面有安裝上述瀏覽器,則使用上述的瀏覽器打開網頁,無需彈出瀏覽器選擇項,如果這幾種都有安裝則按照優先順序使用最優先的,如果上述幾種都沒有則使用默認瀏覽器打開。

衆所周知,android打開網頁是有對應的Intent Action的“android.intent.action.VIEW”,通過這種方式打開url會彈出一個選擇瀏覽器選項,讓你選擇對應的瀏覽器來打開,根本不能滿足需求。後來一想Intent不是可以設置activity的包名+類名,我設置好action再設置好包名+類名應該能定位到對應的瀏覽器,就不需要選擇了。通過在網上下了幾個版本的瀏覽器來看,包名倒還好基本沒變,但是類名的話基本上不同版本的類名也不盡相同,我不可能窮舉出每一個可能出現的類名。難題出來了,最好有方法能夠通過包名直接找到對應的default activity的類名就好,我記得activityManager不是有個方法可以找到包名的LaunchIntent,那麼我想能不能通過Intent來找到類名呢,找了下度娘果然有類似的方法Intent.resolveActivity就可以找到launch activity,問題迎刃而解。有了思想,轉化成代碼就不難了。

理下流程

1.枚舉對應瀏覽器包名到數組中

2.數組循環根據包名找到對應的LaunchIntent

3.通過LaunchIntent找到對應的launch activity的包名

4.Intent通過設置activity的包名+類名


函數如下:

public void openUrl(String url){
		String[] browser = { "com.tencent.mtt", "com.UCMobile", "com.uc.browser", "com.oupeng.browser", "com.oupeng.mini.android", "com.android.browser" };

		Intent intent = null;
		for (String br : browser) {
			if (KpshUtils.getAppIsInstall(kActivity, br)) {
				String clsName = null;
				try {
					PackageManager pm = kActivity.getApplicationContext().getPackageManager();
					Intent intent1 = pm.getLaunchIntentForPackage(br);
					ComponentName act = intent1.resolveActivity(pm);
					clsName = act.getClassName();
					KpshLog.d(KpshActivity.class, "clsName = " + clsName);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					KpshLog.e(e);
				}
				if (clsName == null) {
					break;
				}
				intent = new Intent();
				intent.setAction("android.intent.action.VIEW");
				Uri content_url = Uri.parse(url);
				intent.setData(content_url);
				intent.setClassName(br, clsName);
				break;
			}
		}
		if (intent == null) {
			intent = new Intent();
			intent.setAction("android.intent.action.VIEW");
			Uri content_url = Uri.parse(url);
			intent.setData(content_url);
		}
		kActivity.startActivity(intent);
    }	


第一次寫博客,如有說的不對的還請大家指點,希望能和大家共同學習,共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章