我如何获取列表ofinstall应用程序名称 [英] how do i get list ofinstall apps name
问题描述
这是我的源$ C $ C可显示所有安装使用包名的应用程序列表,但我想说明使用的应用程序名称列表中的所有应用程序。我怎么做?假设我想以显示包含Viber的或WhatsApp的名称列表视图的应用程序。
下面是我的code其中只显示包名我公司提供的应用程序,但我想只显示我提供这名的应用程序,而不是包名。
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); mAppsList =(ListView控件)findViewById(R.id.appslist);
mAppsList.setOnItemClickListener(本); MAPPS = loadInstalledApps(INCLUDE_SYSTEM_APPS); mAdapter =新AppListAdapter(getApplicationContext());
mAdapter.setListItems(MAPPS);
mAppsList.setAdapter(mAdapter); 新LoadIconsTask()执行(mApps.toArray(新的App [] {}));
} @覆盖
公共无效onItemClick(适配器视图<>母公司,观景,INT位置,长
ID) { 最终的应用程序=(APP)parent.getItemAtPosition(位置); AlertDialog.Builder建设者=新AlertDialog.Builder(本); 弦乐味精= app.getTitle()+\\ n \\ n+
版本+ app.getVersionName()+(+
app.getVersion code()+)+
(!?app.getDescription()=空(\\ n \\ n+ app.getDescription()):); builder.setMessage(MSG)
.setCancelable(真)
.setTitle(app.getTitle())
.setIcon(mAdapter.getIcons()获得(app.getPackageName()))
.setPositiveButton(启动,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释的id){
//通过调用其推出的意图启动应用程序
意向I =
。getPackageManager()getLaunchIntentForPackage(app.getPackageName());
尝试{
如果(我!= NULL){
startActivity(ⅰ);
}其他{
I =新意图(app.getPackageName());
startActivity(ⅰ);
}
}赶上(ActivityNotFoundException ERR){
Toast.makeText(MainActivity.this,错误启动程序,Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton(取消,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释的id){
dialog.cancel();
}
});
AlertDialog对话框= builder.create();
dialog.show();
} / **
*使用包管理器来查询所有已安装的应用程序这是 投入豆类和返回
*以列表的形式。
*
* @参数includeSysApps是否包括系统应用
返回:包含{@ code应用}豆每个安装的应用程序列表
* /
私人列表<应用> loadInstalledApps(布尔includeSysApps){
清单<应用>应用=新的ArrayList<应用>(); //包管理器包含所有已安装的信息
应用
软件包管理系统软件包管理系统= getPackageManager(); 清单< PackageInfo>包= packageManager.getInstalledPackages(0);
//PackageManager.GET_META_DATA 的for(int i = 0; I< packs.size();我++){
PackageInfo p值= packs.get(ⅰ);
如果(((p.packageName).equals(com.gfsmart.filemanager))||
((p.packageName).equals(com.mypackage))||
((p.packageName).equals(com.doodlejoy.studio.kidsdoojoy))||
((p.packageName).equals(com.fullfat.android.agentdash))){
//如果((p.applicationInfo).equals(com.mypackage)){ 应用程序=新的App(); app.setTitle(p.applicationInfo.loadLabel(软件包管理系统)的ToString());
app.setPackageName(p.packageName);
app.setVersionName(p.versionName);
app.setVersion code(p.version code);
CharSequence的说明=
p.applicationInfo.loadDescription(软件包管理系统);
app.setDescription(说明= NULL description.toString()!?
);
apps.add(应用);
}
}
返回应用程序;
} / **
*异步任务加载安装的应用程序的图标。
* /
私有类LoadIconsTask扩展的AsyncTask<应用程序,太虚,太虚> {
@覆盖
保护无效doInBackground(应用程序...应用){ 地图<弦乐,可绘制>图标=新的HashMap<弦乐,可绘制>();
软件包管理系统经理=
。getApplicationContext()getPackageManager(); 对于程序(App应用:应用){
字符串PKGNAME = app.getPackageName();
可绘制ICO = NULL;
尝试{
意向I = manager.getLaunchIntentForPackage(PKGNAME);
如果(我!= NULL){
ICO = manager.getActivityIcon(ⅰ);
}
}赶上(ē的NameNotFoundException){
Log.e(ERROR,无法找到包'图标+
PKGNAME +':+ e.getMessage());
}
icons.put(app.getPackageName(),ICO);
}
mAdapter.setIcons(图标); 返回null;
} @覆盖
保护无效onPostExecute(虚空结果){
mAdapter.notifyDataSetChanged();
}
} }
最后的软件包管理系统PM = getPackageManager();
//获取安装的应用程序列表。
清单< ApplicationInfo>包= pm.getInstalledApplications(PackageManager.GET_META_DATA);
然后将它们添加到ListArray<字符串>使用for循环
为(ApplicationInfo packageInfo:包)
myList.Add(packageInfo.packageName);
然后添加整个ListArray<字符串>到ListView
ListAdapter LA =新ArrayAdapter<串GT;(这一点,R.layout.simplerow,
AppNames);
myListView.setAdapter(LA);
而在onItemClickListener你可以使用获得意图
packages.get(ClickedRowNumber).packageName;
好运气
This is my source code which displays a list of all install apps using package name, but I want to show all application in list using apps name. How do i do that? Suppose I want to display application in list view with name like "viber" or "whatsapp". Below is my code which displays only the application which package name I provide, but I want to show only those applications which names I provide, not package name.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAppsList = (ListView) findViewById(R.id.appslist);
mAppsList.setOnItemClickListener(this);
mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS);
mAdapter = new AppListAdapter(getApplicationContext());
mAdapter.setListItems(mApps);
mAppsList.setAdapter(mAdapter);
new LoadIconsTask().execute(mApps.toArray(new App[]{}));
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long
id) {
final App app = (App) parent.getItemAtPosition(position);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
String msg = app.getTitle() + "\n\n" +
"Version " + app.getVersionName() + " (" +
app.getVersionCode() + ")" +
(app.getDescription() != null ? ("\n\n" + app.getDescription()) : "");
builder.setMessage(msg)
.setCancelable(true)
.setTitle(app.getTitle())
.setIcon(mAdapter.getIcons().get(app.getPackageName()))
.setPositiveButton("Launch", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// start the app by invoking its launch intent
Intent i =
getPackageManager().getLaunchIntentForPackage(app.getPackageName());
try {
if (i != null) {
startActivity(i);
} else {
i = new Intent(app.getPackageName());
startActivity(i);
}
} catch (ActivityNotFoundException err) {
Toast.makeText(MainActivity.this, "Error launching app", Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
/**
* Uses the package manager to query for all currently installed apps which are
put into beans and returned
* in form of a list.
*
* @param includeSysApps whether or not to include system applications
* @return a list containing an {@code App} bean for each installed application
*/
private List<App> loadInstalledApps(boolean includeSysApps) {
List<App> apps = new ArrayList<App>();
// the package manager contains the information about all installed
apps
PackageManager packageManager = getPackageManager();
List<PackageInfo> packs = packageManager.getInstalledPackages(0);
//PackageManager.GET_META_DATA
for(int i=0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
if ( ((p.packageName).equals("com.gfsmart.filemanager")) ||
((p.packageName).equals("com.mypackage")) ||
((p.packageName).equals("com.doodlejoy.studio.kidsdoojoy")) ||
((p.packageName).equals("com.fullfat.android.agentdash"))) {
// if ( (p.applicationInfo).equals("com.mypackage")) {
App app = new App();
app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
app.setPackageName(p.packageName);
app.setVersionName(p.versionName);
app.setVersionCode(p.versionCode);
CharSequence description =
p.applicationInfo.loadDescription(packageManager);
app.setDescription(description != null ? description.toString() :
"");
apps.add(app);
}
}
return apps;
}
/**
* An asynchronous task to load the icons of the installed applications.
*/
private class LoadIconsTask extends AsyncTask<App, Void, Void> {
@Override
protected Void doInBackground(App... apps) {
Map<String, Drawable> icons = new HashMap<String, Drawable>();
PackageManager manager =
getApplicationContext().getPackageManager();
for (App app : apps) {
String pkgName = app.getPackageName();
Drawable ico = null;
try {
Intent i = manager.getLaunchIntentForPackage(pkgName);
if (i != null) {
ico = manager.getActivityIcon(i);
}
} catch (NameNotFoundException e) {
Log.e("ERROR", "Unable to find icon for package '" +
pkgName + "': " + e.getMessage());
}
icons.put(app.getPackageName(), ico);
}
mAdapter.setIcons(icons);
return null;
}
@Override
protected void onPostExecute(Void result) {
mAdapter.notifyDataSetChanged();
}
}
}
final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
Then Add them to a ListArray < String> using this for loop
for (ApplicationInfo packageInfo : packages)
myList.Add(packageInfo.packageName);
Then Add the whole ListArray < String> to a listview
ListAdapter la = new ArrayAdapter<String>(this, R.layout.simplerow,
AppNames);
myListView.setAdapter(la);
And in the onItemClickListener you can get the Intent using
packages.get(ClickedRowNumber).packageName;
good Luck
这篇关于我如何获取列表ofinstall应用程序名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!