2017-04-16 85 views
2

我設置我的android應用程序打開特定服務器的某些網址。 當我的應用程序不打算打開某個url時,可能會發生這種情況,因此服務器將返回錯誤。如何強制一個網址在設備的瀏覽器中打開,當我的應用程序設置爲默認應用程序來打開此URL

收到錯誤後,我想在設備的瀏覽器中打開此URL。 由於我的應用程序被設置爲默認應用程序打開這種網址,欲以:

Intent intent = new Intent(Intent.ACTION_VIEW, URI); 
context.startActivity(intent); 

會導致應用程序遞歸和無休止地打開,因爲該設備是識別網址爲需要一個url由我的應用程序打開。

一個解決方案,我發現被強制設備在Chrome中打開網址:如果設備不包含Chrome應用intent.setPackage("com.android.chrome");

時出現了問題。

有沒有一個優雅的解決方案,而不是逐一列出所有可能的android瀏覽器?

P.S.有問題的網址沒有可以區分它們的通用前綴。

+1

你可以在'ACTION_VIEW''Intent'上使用'PackageManager'和'queryIntentActivities()'來獲得你的''沒有拾取的URL。用它來識別一個瀏覽器,然後你可以通過'setPackage()'來使用它。 – CommonsWare

+0

這工作完美,謝謝! – Schor

回答

2

由於CommonsWare建議,我用PackageManger的queryIntentActivities()方法來查找默認瀏覽器:

Intent i = new Intent(Intent.ACTION_VIEW, unusedURI); 
List<ResolveInfo> l = context.getPackageManager().queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY); 

要提取我使用的進程名:l.get(0).activityInfo.processName

intent.setPackage(l.get(0).activityInfo.processName); 

注意的是,還可以使用標記PackageManager.MATCH_ALL接收所有匹配的應用程序。

相關問題