[英]How to get the list of installed Browser Apps in an Android 7.0 running devices programmatically?
[英]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.