package com.hyz;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.hyz.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class APKTest extends Activity implements OnClickListener
{
private SharedPreferences metafer = null;
private Button install,unInstall,getMessage;
private List<PackageInfo> allApp = new ArrayList<PackageInfo>();
private List<PackageInfo> systemApp = new ArrayList<PackageInfo>();
private List<PackageInfo> userApp = new ArrayList<PackageInfo>();
/*
* apk安装或卸载路径,(换别的路径也行,比如/data/app/juegos.apk,但当你点“安装apk”按钮后,
* data/app/下的juegos.apk名字会变成"包名-数字.apk",此时按卸载按钮,会报找不到apk错误) *
*/
private String path = "/data/data/com.hyz/shared_prefs/juegos.apk";
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
install = (Button)findViewById(R.id.install);
unInstall = (Button)findViewById(R.id.unInstall);
getMessage = (Button)findViewById(R.id.getMessage);
install.setOnClickListener(this);
unInstall.setOnClickListener(this);
getMessage.setOnClickListener(this);
//安装apk首先apk要放在shared_prefs文件夹下,此文件夹默认不存在,通过下面这个方法创建。
mkShared_prefs();
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.install: installApk(path);break;
case R.id.unInstall: unInstallApk(path);break;
case R.id.getMessage: getAppMessage(this);break;
}
}
//卸载apk
public void unInstallApk(String path)
{
ApplicationInfo mAppInfo = null;
PackageManager pm = getApplicationContext().getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);
if(info != null)
mAppInfo = info.applicationInfo;
Uri uri = Uri.fromParts("package", mAppInfo.packageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
}
//安装apk
public void installApk(String path)
{
Intent ret = new Intent();
ret.setDataAndType(Uri.fromFile(new File(path)),"application/vnd.android.package-archive");
ret.setAction(Intent.ACTION_VIEW);
startActivity(ret);
}
//新建shared_prefs
public void mkShared_prefs()
{
if (metafer == null)
metafer = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = metafer.edit();
editor.commit();
}
/**
* 获取手机内全部、系统、用户安装的应用
*/
public List<PackageInfo> getAllApps(Context context)
{
PackageManager pm = context.getPackageManager();
//获取手机内所有应用
allApp = pm.getInstalledPackages(0);
for (int i = 0; i < allApp.size(); i++)
{
PackageInfo pi = (PackageInfo) allApp.get(i);
//该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用
if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)
{
userApp.add(pi);
}
else
{
systemApp.add(pi);
}
}
}
public void getAppMessage()
{
str = "包名:"+ pi.packageName + " 应用名:"+pm.getApplicationLabel(pi.applicationInfo).toString()
+ " 图片:"+pm.getApplicationIcon(pi.applicationInfo)+" sharedUserId:"+ pi.sharedUserId +" sharedUserLabel:"+pi.sharedUserLabel
+ " versionCode:"+pi.versionCode+ " versionName:"+pi.versionName+ " describeContents:"+pi.describeContents()
+ " toString:"+pi.toString()+ " activities:"+pi.activities+ " applicationInfo:"+pi.applicationInfo
+ " configPreferences:"+pi.configPreferences ;
System.out.println(str);
}
/*
* 通过 PackageInfo 获取具体信息方法:
包名获取方法:packageInfo.packageName
icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)
.requestedPermissions
通过 ResolveInfo 获取具体信息方法:
包名获取方法:resolve.activityInfo.packageName
icon获取获取方法:resolve.loadIcon(packageManager)
应用名称获取方法:resolve.loadLabel(packageManager).toString()
*/
}