我正在做一个像浏览器一样的应用程序,但我希望允许用户拨打他的第二个"首选浏览器,带有浏览器中的按钮。
因此,我的应用程序是一个浏览器,我无法调用常见的ACTION_VIEW Intent,如果我这样做,我自己的应用程序将出现在选择器上。
因此,我制作了一个首选项屏幕,允许您设置首选浏览器。要使用可用的浏览器填充ListPreference,我使用类似的东西:
Uri uri = Uri.parse("http://google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
List<ResolveInfo> allActivities = ctx.getPackageManager().queryIntentActivities(intent, 0);
循环列表并构建首选项,我在SharedPreferences上存储包名称供以后使用:
((ActivityInfo) ri.activityInfo).packageName
当用户点击&#34;打开我首选的浏览器&#34;按钮我像这样调用浏览器活动(我再次通过ResolveInfo循环,因为我不存储像ActivityInfo这样的复杂类型:
Uri uri = Uri.parse("http://google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
List<ResolveInfo> allActivities = mContext.getPackageManager().queryIntentActivities(intent, 0);
ActivityInfo activity = null;
for (ResolveInfo ri : allActivities) {
String browserAction = ((ActivityInfo) ri.activityInfo).packageName;
if (sharedPrefs.getString(Constants.KEY_PREFERRED_BROWSER,"").equals(browserAction)) {
activity = ri.activityInfo;
break;
}
}
if (activity != null) {
Log.e(TAG,finalUrl);
ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
Intent i=new Intent(Intent.ACTION_MAIN, Uri.parse(finalUrl)); // TRY 1, set URL on Intent constructor
i.putExtra(Intent.EXTRA_TEXT,Uri.parse(finalUrl)); // Try 2, put an EXTRA with the URL :P
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
i.setData(Uri.parse(finalUrl)); // Try 3, set URL as Intent Data
startActivity(i);
}
嗯......你可以看到我尝试了很多东西......我正在使用Android默认浏览器,Chrome和Firefox在Genymotion模拟器上进行测试,只有Chrome正在正确加载网址。
您知道如何为每种情况正确设置URL的意图吗?我可以推断出如何操作,例如,当用户在我的首选项屏幕中选择他喜欢的浏览器时?也许更简单的方法? 0: - )
非常感谢。
答案 0 :(得分:0)
试试这段代码:
Intent intent = getPackageManager().getLaunchIntentForPackage(
"org.mozilla.firefox");
intent.setData(Uri.parse("www.onliner.by"));
startActivity(intent);
我使用org.mozilla.firefox
和com.android.chrome
修改强> 看起来这有效:
Uri uri = Uri.parse("http://www.onliner.by");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
List<ResolveInfo> allActivities = getPackageManager()
.queryIntentActivities(intent, 0);
ActivityInfo activity = null;
for (ResolveInfo ri : allActivities) {
String browserAction = ((ActivityInfo) ri.activityInfo).packageName;
if ("com.android.chrome".equals(browserAction)) {
activity = ri.activityInfo;
break;
}
}
if (activity != null) {
ComponentName name = new ComponentName(
activity.applicationInfo.packageName, activity.name);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setComponent(name);
i.setData(uri);
startActivity(i);
}
但是,只有在“www.onliner.by”之前添加“http://”。