作者:kkq--_771 | 来源:互联网 | 2023-09-02 11:55
有时候我们在开发程序时需要用到获取手机中已安装程序的包名、图标、应用名称,在这里写一篇简单的博客还是跟往常一样,先上图,最后会给出程序的Demo从上图可以看出,每个Item都包含了相应信息,所以在
有时候我们在开发程序时需要用到获取手机中已安装程序的包名、图标、应用名称,在这里写一篇简单的博客
还是跟往常一样,先上图,最后会给出程序的Demo
从上图可以看出,每个 Item 都包含了相应信息,所以在此为了封装信息,就写了一个 信息封装类
package com.cn.sz.fisi.appinfo.mode;
import android.graphics.drawable.Drawable;
public class AppInfo {
String appName;
String packageName;
Drawable drawable;
public AppInfo(){}
public AppInfo(String appName){
this.appName = appName;
}
public AppInfo(String appName, String packageName){
this.appName = appName;
this.packageName = packageName;
}
public AppInfo(String appName,String packageName, Drawable drawable){
this.appName = appName;
this.packageName = packageName;
this.drawable = drawable;
}
public String getAppName() {
if(null == appName)
return "";
else
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getPackageName() {
if(null == packageName)
return "";
else
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public Drawable getDrawable() {
return drawable;
}
public void setDrawable(Drawable drawable) {
this.drawable = drawable;
}
}
Activity 代码
package com.cn.sz.fisi.appinfo;
import java.util.ArrayList;
import java.util.List;
import com.cn.sz.fisi.appinfo.adapter.AppInfosAdapter;
import com.cn.sz.fisi.appinfo.mode.AppInfo;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
ListView appInfoListView = null;
List appInfos = null;
AppInfosAdapter infosAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appInfoListView = (ListView)this.findViewById(R.id.appinfo_list);
appInfos = getAppInfos();
updateUI(appInfos);
}
public void updateUI(List appInfos){
if(null != appInfos){
infosAdapter = new AppInfosAdapter(getApplication(), appInfos);
appInfoListView.setAdapter(infosAdapter);
}
}
// 获取包名信息
public List getAppInfos(){
PackageManager pm = getApplication().getPackageManager();
List packgeInfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
appInfos = new ArrayList();
/* 获取应用程序的名称,不是包名,而是清单文件中的labelname
String str_name = packageInfo.applicationInfo.loadLabel(pm).toString();
appInfo.setAppName(str_name);
*/
for(PackageInfo packgeInfo : packgeInfos){
String appName = packgeInfo.applicationInfo.loadLabel(pm).toString();
String packageName = packgeInfo.packageName;
Drawable drawable = packgeInfo.applicationInfo.loadIcon(pm);
AppInfo appInfo = new AppInfo(appName, packageName,drawable);
appInfos.add(appInfo);
}
return appInfos;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
下面是 adapter 的信息
package com.cn.sz.fisi.appinfo.adapter;
import java.util.List;
import com.cn.sz.fisi.appinfo.R;
import com.cn.sz.fisi.appinfo.mode.AppInfo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class AppInfosAdapter extends BaseAdapter {
Context context;
List appInfos;
public AppInfosAdapter(){}
public AppInfosAdapter(Context context , List infos ){
this.cOntext= context;
this.appInfos = infos;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.cOntext= context;
}
public List getAppInfos() {
return appInfos;
}
public void setAppInfos(List appInfos) {
this.appInfos = appInfos;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
int count = 0;
if(null != appInfos){
return appInfos.size();
};
return count;
}
@Override
public Object getItem(int index) {
// TODO Auto-generated method stub
return appInfos.get(index);
}
@Override
public long getItemId(int index) {
// TODO Auto-generated method stub
return index;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
ViewHolder viewHolder = null;
if(null == convertView){
viewHolder = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(context);
cOnvertView= mInflater.inflate(R.layout.app_info_item, null);
viewHolder.appIcOnImg= (ImageView)convertView.findViewById(R.id.app_icon);
viewHolder.appNameText = (TextView)convertView.findViewById(R.id.app_info_name);
viewHolder.appPackageText = (TextView)convertView.findViewById(R.id.app_info_package_name);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
if(null != appInfos){
viewHolder.appIconImg.setBackground(appInfos.get(position).getDrawable());
viewHolder.appNameText.setText(appInfos.get(position).getAppName());
viewHolder.appPackageText.setText(appInfos.get(position).getPackageName());
}
return convertView;
}
private class ViewHolder{
ImageView appIconImg;
TextView appNameText;
TextView appPackageText;
}
}
Activity 的 XML 代码
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:cOntext=".MainActivity" >
android:id="@+id/appinfo_text"
android:layout_
android:layout_
android:textSize="16sp"
android:text="@string/application_info"
android:gravity="center"
android:background="#888899"
android:paddingBottom="8dp"
android:paddingTop="8dp"
/>
android:id="@+id/appinfo_list"
android:layout_
android:layout_
android:layout_below="@id/appinfo_text"
android:divider="#666666"
android:divider
>
Item的 xml 代码
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:cOntext=".MainActivity" >
android:id="@+id/appinfo_text"
android:layout_
android:layout_
android:textSize="16sp"
android:text="@string/application_info"
android:gravity="center"
android:background="#888899"
android:paddingBottom="8dp"
android:paddingTop="8dp"
/>
android:id="@+id/appinfo_list"
android:layout_
android:layout_
android:layout_below="@id/appinfo_text"
android:divider="#666666"
android:divider
>
项目 的 demo 地址
http://download.csdn.net/detail/qijian0503/9306333