首先上效果图
核心代码:
package com.xiaoya.getAppsInfo; import android.content.pm.*; import android.graphics.drawable.*; import android.os.*; import android.support.v7.app.*; import android.widget.*; import java.util.*; public class MainActivity extends AppCompatActivity { private AppInfoAdapter mAdapter; private List<AppInfo> mAppInfos = null; private ListView mAppsListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAppsListView = ( ListView ) findViewById(R.id.mlist); } @Override protected void onResume() { super.onResume(); getApps(); sortData(( ArrayList<AppInfo> ) mAppInfos); updateUI(mAppInfos); } /** * 更新UI; * * @param appInfos */ public void updateUI(List<AppInfo> appInfos) { if (null != appInfos) { mAdapter = new AppInfoAdapter(getApplication(), appInfos); mAppsListView.setAdapter(mAdapter); } } /** * 获取手机安装的应用信息; */ private void getApps() { mAppInfos = new ArrayList<>(); PackageManager pm = getApplication().getPackageManager(); List<PackageInfo> packageInfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); /* 获取应用程序的名称,不是包名,而是清单文件中的labelname String str_name = packageInfo.applicationInfo.loadLabel(pm).toString(); appInfo.setAppName(str_name); */ for (PackageInfo packageInfo : packageInfos) { String appName = packageInfo.applicationInfo.loadLabel(pm).toString(); String versionName = packageInfo.versionName; Drawable drawable = packageInfo.applicationInfo.loadIcon(pm); long lastUpdateTime = packageInfo.lastUpdateTime; AppInfo appInfo = new AppInfo(appName, versionName, drawable,lastUpdateTime); mAppInfos.add(appInfo); } } /** * 按照时间排序; * @param mList */ private void sortData(ArrayList<AppInfo> mList) { Collections.sort(mList, new Comparator<AppInfo>() { /** * * @param lhs * @param rhs * @return an integer < 0 if lhs is less than rhs, 0 if they are * equal, and > 0 if lhs is greater than rhs,比较数据大小时,这里比的是时间 */ @Override public int compare(AppInfo lhs, AppInfo rhs) { long date1 = lhs.getUpdateTime(); long date2 = rhs.getUpdateTime(); // 对时间字段进行降序 if (date1 < date2) { return 1; } return -1; } }); } }
其次是adapter文件AppInfoAdapter.java和布局文件item_apps.xml和activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical">
<ImageView
android:id="@+id/item_app_img"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:src="@mipmap/ic_launcher"
android:scaleType="center"
/>
<TextView
android:id="@+id/item_app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/item_app_img"
android:text="应用名称"
android:textSize="14sp"/>
<TextView
android:id="@+id/item_app_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/item_app_name"
android:layout_below="@id/item_app_name"
android:layout_marginTop="8dp"
android:text="应用版本"
android:textSize="14sp"/>
<TextView
android:id="@+id/item_app_update_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:textSize="12sp"
android:text="更新时间"
android:visibility="gone"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_alignParentBottom="true"
android:background="#ccc"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="应用列表"
android:textColor="#333"
android:textSize="18sp"
/>
<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DADDE3"/>
<ListView
android:id="@+id/mlist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp"
/>
</LinearLayout>
package com.xiaoya.getAppsInfo;
import android.content.*;
import android.view.*;
import android.widget.*;
import java.util.*;
/**
* <pre>
* author : xiaoya
* time : 2018/03/03
* desc 列表的适配器
* version: 1.0
* </pre>
*/
public class AppInfoAdapter extends BaseAdapter {
private Context mContext;
private List<AppInfo> mList = new ArrayList<>();
public AppInfoAdapter(Context context, List list) {
this.mContext = context;
this.mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder holder = null;
AppInfo item_apps = mList.get(position);
if (null == convertView) {
convertView = View.inflate(mContext, R.layout.item_apps, null);
holder = new MyViewHolder();
holder.item_app_img = ( ImageView ) convertView.findViewById(R.id.item_app_img);
holder.item_app_name = ( TextView ) convertView.findViewById(R.id.item_app_name);
holder.item_app_version = ( TextView ) convertView.findViewById(R.id.item_app_version);
holder.item_app_updatetime=(TextView )convertView.findViewById(R.id.item_app_update_time);
convertView.setTag(holder);
} else {
holder = ( MyViewHolder ) convertView.getTag();
}
holder.item_app_img.setImageDrawable(item_apps.getDrawable());
//只有图片上传失败并且已经上传完成时 显示上传失败提示;
holder.item_app_name.setText(item_apps.getAppName());
holder.item_app_version.setText(item_apps.getAppVersion());
holder.item_app_updatetime.setText(item_apps.getUpdateTime()+"");
return convertView;
}
public class MyViewHolder {
ImageView item_app_img;
TextView item_app_name;
TextView item_app_version;
TextView item_app_updatetime;
}
}
实体类AppInfo.java
package com.xiaoya.getAppsInfo;
import android.graphics.drawable.*;
/**
* <pre>
* author : xiaoya
* time : 2018/03/03
* desc :应用信息封装类
* version: 1.0
* </pre>
*/
public class AppInfo {
private String appName;
private String appVersion;
private Drawable drawable;
private long updateTime;
public AppInfo() {
}
public AppInfo(String appName) {
this.appName = appName;
}
public AppInfo(String appName, String appVersion) {
this.appName = appName;
this.appVersion = appVersion;
}
public AppInfo(String appName, String appVersion, Drawable drawable) {
this.appName = appName;
this.appVersion = appVersion;
this.drawable = drawable;
}
public AppInfo(String appName, String appVersion, Drawable drawable, long updateTime) {
this.appName = appName;
this.appVersion = appVersion;
this.drawable = drawable;
this.updateTime = updateTime;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getAppVersion() {
return appVersion;
}
public void setAppVersion(String appVersion) {
this.appVersion = appVersion;
}
public Drawable getDrawable() {
return drawable;
}
public void setDrawable(Drawable drawable) {
this.drawable = drawable;
}
public long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(long updateTime) {
this.updateTime = updateTime;
}
}
如有更好的方式实现欢迎提出来,有不对的地方欢迎指正!