使用 queryIntentActivities 获取应用名称和包名
- intent.addCategory(Intent.CATEGORY_LAUNCHER);// 桌面启动属性
- mResolveInfos =
mPackageManager.queryIntentActivities(intent,PackageManager.MATCH_ALL); // 使用 queryIntentActivities 获取应用名称和包名 List
package com.fadi.su.sortedlist;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "shz_debug";
private List<AppInfo> lists;
private PackageManager mPackageManager;
private RecyclerView mRecyclerView;
private AppInfoAdapter mAppInfoAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initValues();
initListens();
syncTask();
}
private void initViews() {
mRecyclerView = findViewById(R.id.recyclerView);
}
private void initValues() {
mPackageManager = getPackageManager();
lists = new ArrayList<>();
mAppInfoAdapter = new AppInfoAdapter(lists);
mRecyclerView.setAdapter(mAppInfoAdapter);
}
private void initListens() {
}
private void syncTask() {
AppInfoTask mAppInfoTask = new AppInfoTask(this);
mAppInfoTask.execute();
}
private class AppInfoTask extends AsyncTask<Void, Void, List<AppInfo>> {
private Context context;
public AppInfoTask(Context _context) {
context = _context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
lists.clear();
}
@Override
protected List<AppInfo> doInBackground(Void... voids) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> mResolveInfos = mPackageManager.queryIntentActivities(intent,PackageManager.MATCH_ALL);
if (mResolveInfos == null || mResolveInfos.isEmpty()) {
return null;
}
List<AppInfo> result = new ArrayList<>();
for (ResolveInfo info: mResolveInfos) {
AppInfo mAppInfo = new AppInfo();
mAppInfo.appName = info.activityInfo.applicationInfo.loadLabel(mPackageManager).toString();
mAppInfo.pkgName = info.activityInfo.packageName;
if (!isSysApp(context, mAppInfo.pkgName )) {
Log.d(TAG, "AppInfo :" + mAppInfo.toString());
result.add(mAppInfo);
}
}
return result;
}
@Override
protected void onPostExecute(List<AppInfo> result) {
super.onPostExecute(result);
if (result != null && !result.isEmpty()) {
lists.addAll(result);
}
}
public boolean isSysApp(Context context, String packageName){
PackageInfo packageInfo = null;
try {
packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1;
}
}
}