簡體   English   中英

如何以編程方式獲取Android中已安裝的游戲列表

[英]How to programmatically get the installed game list in Android

在我的項目中,我可以通過以下代碼獲取所有已安裝應用程序的列表:

public class ApplicationFilterActivity extends Activity implements
        OnItemClickListener {

    ListView appfilter;
    SharedPreferences preferences;
    public static String filenames = "RotateData";
PackageManager pck;
    ArrayList<Applications> results = new ArrayList<Applications>();
    ArrayList<String> gotPackagename = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        appfilter = (ListView) findViewById(R.id.lvApp);
        preferences = getSharedPreferences(filenames, 0);
        PackageManager packageManager = this.getPackageManager();
        List<PackageInfo> applist = packageManager.getInstalledPackages(0);
        Iterator<PackageInfo> it = applist.iterator();
        while (it.hasNext()) {
            PackageInfo pk = (PackageInfo) it.next();
            results.add(new Applications(pk.applicationInfo
                    .loadIcon(packageManager), ""
                    + pk.applicationInfo.loadLabel(packageManager)));
            Log.i("AppName", "" + pk.applicationInfo.packageName);
            gotPackagename.add(pk.applicationInfo.packageName);
        }

        appfilter.setAdapter(new Customarrayadapter(this, results));
        appfilter.setOnItemClickListener(this);
    }
}

但現在我想過濾列表只顯示游戲,這可能嗎?

在我的項目中,我可以通過以下代碼獲取所有已安裝應用程序的列表:

public class ApplicationFilterActivity extends Activity implements
        OnItemClickListener {

    ListView appfilter;
    SharedPreferences preferences;
    public static String filenames = "RotateData";
PackageManager pck;
    ArrayList<Applications> results = new ArrayList<Applications>();
    ArrayList<String> gotPackagename = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        appfilter = (ListView) findViewById(R.id.lvApp);
        preferences = getSharedPreferences(filenames, 0);
        PackageManager packageManager = this.getPackageManager();
        List<PackageInfo> applist = packageManager.getInstalledPackages(0);
        Iterator<PackageInfo> it = applist.iterator();
        while (it.hasNext()) {
            PackageInfo pk = (PackageInfo) it.next();
            results.add(new Applications(pk.applicationInfo
                    .loadIcon(packageManager), ""
                    + pk.applicationInfo.loadLabel(packageManager)));
            Log.i("AppName", "" + pk.applicationInfo.packageName);
            gotPackagename.add(pk.applicationInfo.packageName);
        }

        appfilter.setAdapter(new Customarrayadapter(this, results));
        appfilter.setOnItemClickListener(this);
    }
}

但是現在我想過濾列表僅顯示游戲,這可能嗎?

在我的項目中,我可以通過以下代碼獲取所有已安裝應用程序的列表:

public class ApplicationFilterActivity extends Activity implements
        OnItemClickListener {

    ListView appfilter;
    SharedPreferences preferences;
    public static String filenames = "RotateData";
PackageManager pck;
    ArrayList<Applications> results = new ArrayList<Applications>();
    ArrayList<String> gotPackagename = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        appfilter = (ListView) findViewById(R.id.lvApp);
        preferences = getSharedPreferences(filenames, 0);
        PackageManager packageManager = this.getPackageManager();
        List<PackageInfo> applist = packageManager.getInstalledPackages(0);
        Iterator<PackageInfo> it = applist.iterator();
        while (it.hasNext()) {
            PackageInfo pk = (PackageInfo) it.next();
            results.add(new Applications(pk.applicationInfo
                    .loadIcon(packageManager), ""
                    + pk.applicationInfo.loadLabel(packageManager)));
            Log.i("AppName", "" + pk.applicationInfo.packageName);
            gotPackagename.add(pk.applicationInfo.packageName);
        }

        appfilter.setAdapter(new Customarrayadapter(this, results));
        appfilter.setOnItemClickListener(this);
    }
}

但是現在我想過濾列表僅顯示游戲,這可能嗎?

所以首先在你的清單文件中添加這個權限

使用權限 android:name="android.permission.QUERY_ALL_PACKAGES"

如果為真,它將返回一個布爾值,那么您的包名稱來自游戲類別

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    binding = GameListBinding.inflate(getLayoutInflater());
    View view = binding.getRoot();
    setContentView(view);

    final PackageManager pm = getPackageManager();

    //get a list of installed apps.
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
    for (ApplicationInfo packageInfo : packages) {

        Boolean b = checkAppIsGame(GameList.this,packageInfo.packageName);

        if(b){
            Toast.makeText(GameList.this, "This is Game "+ packageInfo.packageName, Toast.LENGTH_SHORT).show();
        }

    }

}

public static boolean checkAppIsGame(Context context, String packageName) {
    try {
        ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName, 0);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Log.e("MyGame", "App Packagename is game : " + packageName);
            return info.category == ApplicationInfo.CATEGORY_GAME;
        } else {
            Toast.makeText(context, "is game 2 " + packageName, Toast.LENGTH_SHORT).show();
            Log.e("Util", "Package is game 2 : " + packageName);
            return (info.flags & ApplicationInfo.FLAG_IS_GAME) == ApplicationInfo.FLAG_IS_GAME;
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("MyGame", "Package info Not Found For : " + packageName, e);

        return false;
    }

}

在我的項目中,我可以通過以下代碼獲取所有已安裝應用程序的列表:

public class ApplicationFilterActivity extends Activity implements
        OnItemClickListener {

    ListView appfilter;
    SharedPreferences preferences;
    public static String filenames = "RotateData";
PackageManager pck;
    ArrayList<Applications> results = new ArrayList<Applications>();
    ArrayList<String> gotPackagename = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        appfilter = (ListView) findViewById(R.id.lvApp);
        preferences = getSharedPreferences(filenames, 0);
        PackageManager packageManager = this.getPackageManager();
        List<PackageInfo> applist = packageManager.getInstalledPackages(0);
        Iterator<PackageInfo> it = applist.iterator();
        while (it.hasNext()) {
            PackageInfo pk = (PackageInfo) it.next();
            results.add(new Applications(pk.applicationInfo
                    .loadIcon(packageManager), ""
                    + pk.applicationInfo.loadLabel(packageManager)));
            Log.i("AppName", "" + pk.applicationInfo.packageName);
            gotPackagename.add(pk.applicationInfo.packageName);
        }

        appfilter.setAdapter(new Customarrayadapter(this, results));
        appfilter.setOnItemClickListener(this);
    }
}

但是現在我想過濾列表僅顯示游戲,這可能嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM