最近开发遇到一个问题,也苦了很久,一直没找到合适的方法,今天经大神点拨,算是不错的解决了问题。什么问题呢?就是调用系统工具,比如系统照相机、系统浏览器,你或许会说调用随便一百度就有,对,很简单,但是,现如今刷机成了一种潮流,当遇到一款手机刷了机也ROOT鸟,把系统带的工具给删掉了,一调用系统工具就会报错,说找不到指定的Activity,这时就该愁了,我首先想到的是有木有什么方法可以检查系统工具没木有啊,百度加谷歌,木有方法,最后看到个通过应用包查找应用在不,代码如下:
通过包名判断 public boolean checkBrowser(String packageName) { if (packageName == null || "".equals(packageName)) return false; try { ApplicationInfo info = getPackageManager().getApplicationInfo( packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true; } catch (NameNotFoundException e) { return false; } }
还有种是通过包名判断应用的Activity,代码如下:
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", //$NON-NLS-1$ "com.android.settings.InstalledAppDetails"); //$NON-NLS-1$ intent.putExtra("com.android.settings.ApplicationPkgName", //$NON-NLS-1$ mCurrentPkgName); List<ResolveInfo> acts = getPackageManager().queryIntentActivities( intent, 0); if (acts.size() > 0) { startActivity(intent); } else { Toast.makeText(this, getString(R.string.failed_to_resolve_activity), Toast.LENGTH_SHORT).show(); }
但是我这时发现不知道系统工具的包名,傻了吧,经过一番周折,有的人说不用考虑那些刷过的手机,但是我发现QQ微信都是做过判断的,那么我还是要做,最后通过一个大神指点,豁然开朗,就搞定了,虽然算不上很完美的解决方案,但也凑活,总比没有好。其实很简单,就是捕获异常,当没有系统工具时,会有一个异常,捕获了然后吐司告知用户无系统应用。
要是哪个大神有更好的方法,请不吝指教,多谢。