使用 queryIntentActivities 獲取應用名稱和包名

使用 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);

            // 使用 queryIntentActivities 獲取應用名稱和包名
            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;
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章