获取android 应用程序包名、图标、应用名称

有时候我们在开发程序时需要用到获取手机中已安装程序的包名、图标、应用名称,在这里写一篇简单的博客

还是跟往常一样,先上图,最后会给出程序的Demo


从上图可以看出,每个 Item 都包含了相应信息,所以在此为了封装信息,就写了一个 信息封装类

<span style="font-size:14px;">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;
	}
	
}</span>


Activity 代码 

<span style="font-size:14px;">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<AppInfo> 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<AppInfo> appInfos){
    	if(null != appInfos){
    		infosAdapter = new AppInfosAdapter(getApplication(), appInfos);
    		appInfoListView.setAdapter(infosAdapter);
    	}
    }
    
<span style="color:#ff0000;background-color: rgb(255, 255, 255);">    // 获取包名信息
    public List<AppInfo> getAppInfos(){
    	PackageManager pm = getApplication().getPackageManager();
    	List<PackageInfo>  packgeInfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    	appInfos = new ArrayList<AppInfo>();
    	/* 获取应用程序的名称,不是包名,而是清单文件中的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;
    }</span>
    


    @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;
    }
    
}
</span>


下面是 adapter 的信息

<span style="font-size:14px;">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<AppInfo> appInfos;

	public AppInfosAdapter(){}
	
	public AppInfosAdapter(Context context , List<AppInfo> infos ){
		this.context = context;
		this.appInfos = infos;
	}
	
	public Context getContext() {
		return context;
	}

	public void setContext(Context context) {
		this.context = context;
	}

	public List<AppInfo> getAppInfos() {
		return appInfos;
	}

	public void setAppInfos(List<AppInfo> 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;
	}
	
}</span>

Activity 的 XML 代码  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/appinfo_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:text="@string/application_info"
        android:gravity="center"
        android:background="#888899"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        />
    
    <ListView 
        android:id="@+id/appinfo_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/appinfo_text"
        android:divider="#666666"
        android:dividerHeight="1dp"
        >
    </ListView>
    

</RelativeLayout>

Item的 xml 代码

<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/appinfo_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:text="@string/application_info"
        android:gravity="center"
        android:background="#888899"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        />
    
    <ListView 
        android:id="@+id/appinfo_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/appinfo_text"
        android:divider="#666666"
        android:dividerHeight="1dp"
        >
    </ListView>
    

</RelativeLayout>
</span>

项目 的 demo 地址

http://download.csdn.net/detail/qijian0503/9306333



猜你喜欢

转载自blog.csdn.net/qijian0503/article/details/50074089