您的位置:首页 > 移动开发 > Android开发

android 获取手机包名显示

2016-05-12 15:47 495 查看
功能:主要是获取手机所有应用的包名并显示。

实现代码:1、FindApk.java

package wind.com.findapk;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class FinkApk extends Activity {

List<AppsItemInfo> list;
private GridView gridView;
private PackageManager packageManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
gridView = (GridView)findViewById(R.id.gridview);
packageManager = FinkApk.this.getPackageManager();
List<PackageInfo> appList = getAllApps(FinkApk.this);
list = new ArrayList<AppsItemInfo>();
for (int i=0; i< appList.size();i++){
PackageInfo packageInfo = appList.get(i);
AppsItemInfo shareItem = new AppsItemInfo();
shareItem.setIcon(packageManager.getApplicationIcon(packageInfo.applicationInfo));
shareItem.setLabel(packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
shareItem.setPackageName(packageInfo.applicationInfo.packageName);
list.add(shareItem);

}
gridView.setAdapter(new baseAdapter());
gridView.setOnItemClickListener(new ClickListener());
}

private class baseAdapter extends BaseAdapter {
LayoutInflater inflater = LayoutInflater.from(FinkApk.this);

@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
// 使用View的对象itemView与R.layout.item关联
convertView = inflater.inflate(R.layout.apps, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.apps_image);
holder.label = (TextView) convertView.findViewById(R.id.apps_textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.icon.setImageDrawable(list.get(position).getIcon());
holder.label.setText(list.get(position).getLabel().toString());

return convertView;

}

}
static class ViewHolder{
ImageView icon;
TextView label;
}

// 当用户点击应用程序图标时,将对这个类做出响应
private class ClickListener implements AdapterView.OnItemClickListener {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {

PackageManager packageManager =FinkApk.this.getPackageManager();
String pName = list.get(arg2).getPackageName(); //获取包名
Intent intent = new Intent();
//获取intent
intent =packageManager.getLaunchIntentForPackage(pName);
startActivity(intent);
}

}
public static List<PackageInfo> getAllApps(Context context) {

List<PackageInfo> apps = new ArrayList<PackageInfo>();
PackageManager pManager = context.getPackageManager();
// 获取手机内所有应用
List<PackageInfo> packlist = pManager.getInstalledPackages(0);
for (int i = 0; i < packlist.size(); i++) {
PackageInfo pak = (PackageInfo) packlist.get(i);

// 判断是否为非系统预装的应用程序
// 这里还可以添加系统自带的,这里就先不添加了,如果有需要可以自己添加
// if()里的值如果<=0则为自己装的程序,否则为系统工程自带
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) > 0) {
// 添加自己已经安装的应用程序
apps.add(pak);
}

}
return apps;
}
public String className(String packagename){
String aa="";
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final PackageManager packageManager = getPackageManager();
List<ResolveInfo> apps = packageManager.queryIntentActivities(
mainIntent, 0);
for (int i = 0; i < apps.size(); i++) {
ResolveInfo info = apps.get(i);
Log.e("TAG", info.activityInfo.loadLabel(packageManager)
+ " pkgName "
+ info.activityInfo.applicationInfo.packageName + " className "
+ info.activityInfo.name);
if(packagename==info.activityInfo.applicationInfo.packageName)
aa = info.activityInfo.name;
}
return aa;
}
}


2、appsItemInfo.java

package wind.com.findapk;

import android.graphics.drawable.Drawable;

public class AppsItemInfo{
private Drawable icon; // 存放图片
private String label; // 存放应用程序名
private String packageName; // 存放应用程序包名

public Drawable getIcon() {
return icon;
}

public void setIcon(Drawable icon) {
this.icon = icon;
}

public String getLabel() {
return label;
}

public void setLabel(String label) {
this.label = label;
}

public String getPackageName() {
return packageName;
}

public void setPackageName(String packageName) {
this.packageName = packageName;
}
}
3、main.xml布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:background="@drawable/wall"
android:layout_height="fill_parent"
>
<TextView
android:textSize="25sp"
android:gravity="center"
android:layout_marginTop="100dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:text="@string/title"/>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="95dp"
android:stretchMode="columnWidth"
/>
</LinearLayout>
4、apps.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center" >

<ImageView
android:id="@+id/apps_image"
android:layout_width="48dip"
android:layout_height="48dip"
android:icon="@drawable/ic_launcher" />
<TextView
android:id="@+id/apps_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxEms="6"
android:lines="2"
android:gravity="center"
android:text="good" />

</LinearLayout>
5、权限文件代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="wind.com.findapk">
<!--android:theme="@android:style/Theme.Translucent" android:theme="@android:style/Theme.Dialog"-->
<application
android:allowBackup="true"
android:icon="@drawable/games"
android:label="@string/app_name"
android:theme="@style/Transparent"
android:launchMode="singleTask"
android:supportsRtl="true">
<activity android:name=".FinkApk">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

获取程序名字

/*
* 获取程序的名字
*/
public String getAppName(String packname, int position ,PackageManager pm){

ApplicationInfo info = null;
try {
info = pm.getApplicationInfo(packname, 0);
Log.e("nsc","info="+info.loadLabel(pm).toString() + " packname=="+packname +" className =="+info.processName+ " other=="+info.className);
} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
return info.loadLabel(pm).toString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: