效果图

Android 开发之获取手机中所有App_第1张图片

代码

  1. 添加依赖
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'implementation 'androidx.recyclerview:recyclerview:1.1.0'
  1. AppInfo.java
import android.graphics.drawable.Drawable;/** * created on 2020/8/3 20:22 * * @author Scarf Gong */public class AppInfo {    private Drawable image;    private String appName;    private String packageName;    public AppInfo() {    }    public Drawable getImage() {        return image;    }    public void setImage(Drawable image) {        this.image = image;    }    public String getAppName() {        return appName;    }    public void setAppName(String appName) {        this.appName = appName;    }    public String getPackageName() {        return packageName;    }    public void setPackageName(String packageName) {        this.packageName = packageName;    }}
  1. AppUtils.java
/** * created on 2020/8/3 20:24 * * @author Scarf Gong */public class AppUtils {    private static final String TAG = "AppUtils";    public static List<AppInfo> scanLocalInstallAppList(PackageManager packageManager) {        List myAppInfos = new ArrayList();        try {            List packageInfos = packageManager.getInstalledPackages(0);            for (int i = 0; i < packageInfos.size(); i++) {                PackageInfo packageInfo = (PackageInfo) packageInfos.get(i);                //过滤掉系统app                if ((ApplicationInfo.FLAG_SYSTEM & packageInfo.applicationInfo.flags) != 0) {                    continue;                }                AppInfo myAppInfo = new AppInfo();                String appName = packageInfo.applicationInfo.loadLabel(packageManager).toString();                myAppInfo.setAppName(appName);                myAppInfo.setPackageName(packageInfo.packageName);                if (packageInfo.applicationInfo.loadIcon(packageManager) == null) {                    continue;                }                myAppInfo.setImage(packageInfo.applicationInfo.loadIcon(packageManager));                myAppInfos.add(myAppInfo);            }        } catch (Exception e) {            Log.e(TAG, "获取应用包信息失败");        }        return myAppInfos;    }}
  1. AppAdapter.java
/** * created on 2020/8/3 20:26 * * @author Scarf Gong */public class AppAdapter extends BaseQuickAdapter<AppInfo, BaseViewHolder> {    public AppAdapter(int layoutResId, @Nullable List<AppInfo> data) {        super(layoutResId, data);    }    @Override    protected void convert(BaseViewHolder helper, AppInfo item) {        helper.setImageDrawable(R.id.iv_img,item.getImage());        helper.setText(R.id.tv_name,item.getAppName());        helper.addOnClickListener(R.id.ll_layout);    }}
  1. MainActivity.java
public class MainActivity extends AppCompatActivity {    private RecyclerView mRecyclerView;    private AppAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initAdapter();    }    private void initView() {        mRecyclerView = findViewById(R.id.recyclerView);    }    private void initAdapter() {        final List<AppInfo> appInfos = AppUtils.scanLocalInstallAppList(MainActivity.this.getPackageManager());        mAdapter = new AppAdapter(R.layout.item_app_info,appInfos);        mAdapter.openLoadAnimation();        mAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {            @Override            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {                String packageName = appInfos.get(position).getPackageName();                openApp(packageName);            }        });        mRecyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,3));        mRecyclerView.setAdapter(mAdapter);    }    private void openApp(String packageName) {        Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);        startActivity(intent);    }}

布局文件

  1. item_app_info.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:id="@+id/ll_layout"    android:layout_width="120dp"    android:layout_height="120dp"    android:layout_gravity="center"    android:gravity="center">    <ImageView        android:id="@+id/iv_img"        android:layout_width="90dp"        android:layout_height="90dp"        android:src="@mipmap/ic_launcher"/>    <TextView        android:id="@+id/tv_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="16sp"        android:text="android"        android:textColor="#000"/>LinearLayout>

更多相关文章

  1. 关于"match_parent"这个xml的布局设定值
  2. 引入布局
  3. Android中RelativeLayout布局各个xml相对布局属性的介绍和使用
  4. Android之TableLayout布局
  5. Android 布局之DrawLayout
  6. Android学习笔记_布局文件属性的说明
  7. (4.1.25)android学习之布局
  8. 布局初步
  9. Android布局及控件的属性说明

随机推荐

  1. PHP 枚举类型的管理与设计
  2. PHP中mysqli_get_server_version()的用法
  3. Centos下PHP5升级为PHP7的方法
  4. PHP脚本实现Markdown文章上传到七牛图床
  5. linux下 php 安装xml扩展的方法
  6. 关于PHP框架中日志系统的详解
  7. PHP函数库之类与对象详解
  8. php如何按需加载方式来增加程序的灵活度
  9. linux下php安装php-kafka和php-rdkafka扩
  10. PHP脚本导出MySQL数据字典(代码示例)