Android项目——AppManager

一、功能介绍

1、浏览本机应用

此AppManager可以浏览安卓系统下所安装的应用,可自动过滤系统应用和不可进行卸载的第三方应用。

此图为真机软件运行截图(此后均为模拟器运行截图)

为了满足用户需求,提供三种浏览已安装应用的方式,分别为按名称按日期(最近更新和安装的应用)和按大小进行排序。点击左上角的菜单按钮可以实现不同浏览方式的切换。

在标题栏下方设置有提示信息栏,包括当前的排序方式和应用的个数。

下面为分别按大小、名称和日期排序的示意图:

2、卸载应用

卸载应用为AppManager的主要功能,点击卸载按钮,在弹出的对话中选择确定即可卸载相应的应用。

3、搜索应用及运行相关应用

此AppManager还拥有搜索相关应用的功能,点击应用上方的搜索按钮,输入想搜索的内容,点击右侧箭头按钮即可得到搜索结果,可实行多次搜索。

点击相关应用可直接打开此应用

右图为点击AppCh5打开的相关应用

二、代码原理

1、界面布局

布局主要包括提示信息栏和ListView两部分,采用相对布局使ListView对象在提示信息栏的下方。

对ListView中每一个应用的item创建性的布局文件,在其中显示图标,应用信息以及卸载按钮

为了实现浏览方式切换和搜索功能,创建menu文件,其中包含4个item,分别为按名称排序、按大小排序、按日期排序和搜索。

2、活动

为了完成相应的活动,在所有的代码之前,需要先创建一个用于存储应用信息的类AppInfo,其中应包括以下内容:

/**包名*/
public String packageName;
/**版本号*/
public String versionName;
/**版本号*/
public int versionCode;
/**第一次安装时间*/
public long insTime;
/**更新*/
public long updateTime;
/**程序名*/
public String appName;
/**图标*/
public Drawable icon;
/**字节大小*/
public long byteSize;
/**大小*/
public String size;

以上为活动所需的准备工作,下面来看具体的相关活动。

1)刷新列表

首先是第一次进入程序,需要加载系统的应用,创建一个刷新列表的方法,在其中添加新的线程,获取系统已安装的可操作应用,获取应用信息通过Utils.getAppList()方法实现,具体方法在第5部分工具类中介绍。

同时此处添加一个进度对话框来提示用户正在加载相关应用。

2)切换排序方式

首先创建三个不同的比较器,分别按照日期,大小和名称来排序,分别按照updateTimepackageNamebyteSize来进行相关比较,通过重写onOptionsItemSelected()方法,比较选中的项的id和三种排序方式比对,选择相应的比较器实现不同的排序方式。

3)搜索功能

设置搜索文本监听器,重写其中的两个方法。

一个是点击提交按钮(需预先设置提交按钮为true),此时采取Utils.getSearchResult()方法获得搜索结果,具体方法同样在工具类中介绍。

另一个是文本改变时的操作,本应用的搜索功能并不需要在文本改变时进行相关操作,所以不做修改,保持原有的形式。

4)卸载和打开应用功能

卸载应用首先需要为Button按钮设置监听器,在用户点击后获取应用在ListView中的位置和包名,使用Utils.uninstallApk()方法卸载相应应用,同时在卸载结束后刷新列表。

打开应用则同样通过获取相应点击的item的应用包名,采用Utils.openPackage()方法打开应用(和卸载的方法类似,在工具类中不再赘述)。

5)工具类

================================

  • Utils.getAppList()

首先定义一个List< AppInfo>集合,命名为list,其中的对象均为先前创建的AppInfo类。

实例化一个PackageManager,命名为pm,通过pm.getInstalledPackages()方法获得所有已安装包的信息,存储在一个 List< PackageInfo>中,遍历其中的所有元素,并且筛选出去系统应用和AppManager应用本身。将PackageInfo中的信息放入AppInfo类的一个对象中去,将这个对象添加进list。结束遍历后获得完整的包含应用信息的list。

在Adapter中将对应的图标、应用名、版本号和大小信息交给视图当中的ListView中的每一项。

================================

  • Utils.getSearchResult()

此方法的返回值是一个List< AppInfo>,采用以下方法判断是否包含搜索的内容:

if(app.appName.toLowerCase().contains(key.toLowerCase()){
}

如果判断语句成立则将这个app添加进新创建的结果集合中,最后把这个集合作为返回值提交。

================================

  • Utils.uninstallApk()

卸载应用的代码如下:

Uri uri = Uri.parse("package:" + packageName);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);

================================

三、思考与总结

通过此项目的实践,发现自己的Android基础仍有待加强,希望在今后一点点补上短缺,对Android有更深的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 4.0 以上的版本中,如果你要在应用程序中使用 `AppManager.setUserRestriction()` 方法,你可能会遇到编译错误。这是因为该方法属于 Android 框架的隐藏 API,并且在默认情况下,Android Studio 的编译器会禁止对隐藏 API 的访问。 如果你想要使用隐藏 API,你可以尝试以下两种方法: 1. 使用 `@SuppressLint` 注解:在调用 `setUserRestriction()` 方法的地方添加 `@SuppressLint("WrongConstant")` 注解,以告诉编译器忽略对隐藏 API 的警告。示例代码如下: ```java @SuppressLint("WrongConstant") public void setRestriction() { AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE); appOpsManager.setUserRestriction(AppOpsManager.OP_RESTRICTION_ID, true); } ``` 2. 添加隐藏 API 的支持:你可以通过在 `build.gradle` 文件中进行配置,启用对隐藏 API 的支持。在 `android` 块中添加以下代码: ```groovy android { compileSdkVersion 30 buildToolsVersion "30.0.3" defaultConfig { // 其他配置项... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } // 启用对隐藏 API 的支持 tasks.withType(JavaCompile) { options.compilerArgs.add('-Xlint:deprecation') options.compilerArgs.add('-Xlint:unchecked') options.compilerArgs.add('-Xlint:-restriction') } } ``` 请注意,使用隐藏 API 可能会导致应用程序在某些设备上不稳定或不兼容。谨慎使用,并确保你了解隐藏 API 的行为和风险。 希望这些方法能够帮助你解决问题。如果你有其他疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值