仿照uc实现设置默认浏览器的方式:
实现思路:
Ucà设置->设置->设置为默认浏览器。
如果系统没有默认浏览器,就弹出“去设置”,然后再已经安装的所有浏览器中选择一项作为默认,以后点击url链接,都是调用系统默认浏览器。
如果系统已经设置了默认浏览器,就弹出“去清除”,然后在弹出的应用程序详细信息中,清除默认设置。将自己的程序设置为默认浏览器。
1) 设置自己的程序能够被外部连接检测到。在启动activity中追加:intent-filter.
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />
</intent-filter>
</activity>
2) 代码中进行判断
public void setDefautBrawser()
{
PackageManager packageManager = LoginActivity.this.getPackageManager();
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
String[] packageNames;
//找出手机当前安装的所有浏览器程序
List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
int size = resolveInfoList.size();
packageNames=new String[size];
for (int i = 0; i < size; i++)
{
ActivityInfo activityInfo = resolveInfoList.get(i).activityInfo;
String packageName = activityInfo.packageName;
String className = activityInfo.name;
Log.v("xx", "packagename:"+packageName+"className:"+className);
packageNames[i]=packageName;
}
//找出手机当前安装的特定浏览器程序
ResolveInfo resolveInfo= packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
if( resolveInfo != null) {
// someone knows how to handle this mime type with this scheme, don't download.
try {
ActivityInfo activityInfo = resolveInfo.activityInfo;
String packageName = activityInfo.packageName;
int x= packageManager.getApplicationEnabledSetting(packageName);
boolean flag=false;
for(int i=0;i<size;i++)
{
if(packageName.equals(packageNames[i]))
{
//if has setting info,
int pirority=resolveInfo.priority;
if(resolveInfo.isDefault || pirority==0)
{
// flag=true;
}
}
}
//have not default setting braswer
if(flag==false)
{
setDefault.setText("去设置");
startActivity(intent);
}else
{
setDefault.setText("去清除");
showInstalledAppDetails(this,packageName);
}
return;
} catch (ActivityNotFoundException ex) {
Log.d("", "activity not found f" +
"or " + Uri.parse("http://www.baidu.com").getScheme(), ex);
}
}
//找出所有的浏览
}
3)
如果找到已经设置的默认浏览器,那么就弹出此浏览器的设置界面,让用户手工删除。
public static void showInstalledAppDetails(Context context, String packageName) {
Intent intent = new Intent();
final int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts(SCHEME, packageName, null);
intent.setData(uri);
} else { // 2.3以下,使用非公开的接口(查看InstalledAppDetails源码)
// 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。
final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
: APP_PKG_NAME_21);
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName(APP_DETAILS_PACKAGE_NAME,
APP_DETAILS_CLASS_NAME);
intent.putExtra(appPkgName, packageName);
}
context.startActivity(intent);
}
源代码下载路径:
http://download.csdn.net/detail/self_discipline1/7677617