Android应用程序的获取,安装。

来源:互联网 发布:泰拉瑞亚远程联机软件 编辑:程序博客网 时间:2024/05/03 07:42

本小应用主要是获取USB接口盘中的shine文件夹下的应用,并列表显示,单击可以进行安装

获取系统应用,和非系统应用,可以进行卸载,此外还有关闭此应用程序的。

程序很简单,界面不怎么地,那就上代码吧!

(1)MyFile类

package com.shine.apk;import android.graphics.drawable.Drawable;public class MyFile {int VersionCode;//获取apk的号码String VersionName;//获取apk的版本名称String appName;//获取应用程序的名称Drawable Apk_icon;//获取apk图标String PackageName;//获取包名String FilePath;//获取apk绝对的路径int Installed;//获取安装处理类型public MyFile() {super();}public MyFile(int versionCode, String versionName, String appName,Drawable apk_icon, String packageName, String filePath,int installed) {super();VersionCode = versionCode;VersionName = versionName;this.appName = appName;Apk_icon = apk_icon;PackageName = packageName;FilePath = filePath;Installed = installed;}public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public int getVersionCode() {return VersionCode;}public void setVersionCode(int versionCode) {VersionCode = versionCode;}public String getVersionName() {return VersionName;}public void setVersionName(String versionName) {VersionName = versionName;}public Drawable getApk_icon() {return Apk_icon;}public void setApk_icon(Drawable apk_icon) {Apk_icon = apk_icon;}public String getPackageName() {return PackageName;}public void setPackageName(String packageName) {PackageName = packageName;}public String getFilePath() {return FilePath;}public void setFilePath(String filePath) {FilePath = filePath;}public int getInstalled() {return Installed;}public void setInstalled(int installed) {Installed = installed;}}
(2)ApkSearchUtils.java

package com.shine.apk;import java.io.File;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;public class ApkSearchUtils {private static int INSTALL=0;//表示已经安装过private static int UNINSTALL=1;//表示未安装过private static int INSTALLED_UPDATE=2;//表示已经安装不是最新版private Context context;private List<MyFile> myFiles=new ArrayList<MyFile>();File root = new File("/mnt/usb/sda1/Shine");public List<MyFile> getMyFiles(){return myFiles;}public void setMyFiles(List<MyFile> myFiles){this.myFiles=myFiles;}public ApkSearchUtils(Context context){super();this.context=context;FindAllAPKFile(root);}//用递归的思想,递归去找每个目录下面的apkpublic void FindAllAPKFile(File file){//手机上的文件,目前只能判断sd卡上的apk文件//file=Environment.getDataDirectory();//SD卡上的文件目录if(file.isFile()){String name_s=file.getName();System.out.println("==========="+name_s);MyFile myFile=new MyFile();String apk_path=null;//mimeTypeMap.getSingleton()if (name_s.toLowerCase().endsWith(".apk")){apk_path=file.getAbsolutePath();//apk文件的绝对路径// System.out.println("----" + file.getAbsolutePath() + "" +                // name_s);PackageManager pm=context.getPackageManager();PackageInfo pi=pm.getPackageArchiveInfo(apk_path, PackageManager.GET_ACTIVITIES);ApplicationInfo ai=pi.applicationInfo;//获取apk的图标ai.sourceDir=apk_path;ai.publicSourceDir=apk_path;Drawable apk_icon=ai.loadIcon(pm);myFile.setApk_icon(apk_icon);myFile.setAppName(name_s);//得到包名String packagename=pi.packageName;myFile.setPackageName(packagename);System.out.println("1.包名:"+packagename);//apk的绝对路径myFile.setFilePath(file.getAbsolutePath());System.out.println("2.绝对路径名:"+file.getAbsolutePath());//apk的版本信息String versionName=pi.versionName;myFile.setVersionName(versionName);System.out.println("3.apk的版本信息名:"+versionName);//apk的版本号码int versionCode=pi.versionCode;myFile.setVersionCode(versionCode);System.out.println("4.apk的版本号码名:"+versionCode);//安装处理类型                int type = doType(pm, packagename, versionCode);                System.out.println("5.type名:"+type);                myFile.setInstalled(type);                //获取应用的名称                              myFiles.add(myFile);}}else {File[] files=file.listFiles();if (files!=null&&files.length>0) {for (File file_str:files) {FindAllAPKFile(file_str);}}}}/** * 判断该应用是否已经在手机上安装过,有以下几种情况出现 * 1.未安装,这个时候按钮应该是安装单击按钮进行安装 * 2.已经安装,按钮显示已经安装,可以卸载应用 * 3.已安装,但是版本有 更新,按钮显示更新,单击但你就安装应用 * @param pm * @param packagename  要判断应用的包名 * @param versionCode  要判断应用的版本号 * @return */private int doType(PackageManager pm, String packagename, int versionCode) {List<PackageInfo> packageinfos=pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);for (PackageInfo pi:packageinfos) {String pi_packageName=pi.packageName;int pi_versionCode=pi.versionCode;//如果这个包名在系统中已经安装过的应用存在if (packagename.endsWith(pi_packageName)) {if (versionCode==pi_versionCode) {return INSTALL;}else if(versionCode>pi_versionCode){return INSTALLED_UPDATE;}}}return UNINSTALL;}}

(3)PackBaseAdapter.java

package com.shine.apk;import java.util.List;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 PackBaseAdapter extends BaseAdapter {private LayoutInflater mInflater;private List<MyFile> list;public PackBaseAdapter(Context context,List<MyFile> list){super();this.list=list;mInflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int arg0) {return arg0;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubHooker hooker;if (arg1 == null) {arg1 = mInflater.inflate(R.layout.apkitem, null);hooker = new Hooker();hooker.iv=(ImageView) arg1.findViewById(R.id.icon);hooker.tv=(TextView) arg1.findViewById(R.id.name);arg1.setTag(hooker);} else {hooker = (Hooker) arg1.getTag();}hooker.iv.setImageDrawable(list.get(arg0).getApk_icon());hooker.tv.setText(list.get(arg0).getAppName());return arg1;}class Hooker{private ImageView iv;private TextView tv;}}

(4)

package com.shine.apk;import java.io.File;import java.util.ArrayList;import java.util.List;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.app.ActivityManager;import android.content.Context;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;public class MainActivity extends Activity implements OnItemClickListener,OnClickListener {private ListView lv;private Button bt_usb, bt_xitong, bt_putong,guanbi;List<MyFile> list;ApkSearchUtils apksearch;PackBaseAdapter adapter;List<MyFile> myfilesystem;List<MyFile> myfilenosystem;private int flag=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt_usb = (Button) this.findViewById(R.id.main_usb_bt);bt_xitong = (Button) this.findViewById(R.id.main_xitong_bt);bt_putong = (Button) this.findViewById(R.id.main_putong_bt);lv = (ListView) this.findViewById(R.id.main_apk_lv);guanbi=(Button) this.findViewById(R.id.main_guanbi);list = new ArrayList<MyFile>();bt_usb.setOnClickListener(this);bt_xitong.setOnClickListener(this);bt_putong.setOnClickListener(this);lv.setOnItemClickListener(this);guanbi.setOnClickListener(this);}// 安装private void install(String str) {Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(new File(str)),"application/vnd.android.package-archive");startActivity(intent);}//卸载应用  public void uninstallAPK(String packageName){          Uri uri=Uri.parse("package:"+packageName);          Intent intent=new Intent(Intent.ACTION_DELETE,uri);          this.startActivity(intent);      }  @Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stubif (flag==0) {String str = list.get(arg2).getFilePath();install(str);}else if(flag==1){String set=myfilenosystem.get(arg2).getPackageName();uninstallAPK(set);}else if(flag==2){String set1=myfilesystem.get(arg2).getPackageName();uninstallAPK(set1);}}public void getAllSystemAPP() {myfilesystem = new ArrayList<MyFile>();myfilenosystem = new ArrayList<MyFile>();List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);for (int i = 0; i < packages.size(); i++) {PackageInfo packageInfo = packages.get(i);MyFile app = new MyFile();app.Apk_icon = packageInfo.applicationInfo.loadIcon(getPackageManager());app.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();app.PackageName = packageInfo.packageName;app.VersionCode = packageInfo.versionCode;app.VersionName = packageInfo.versionName;if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {// 非系统应用myfilenosystem.add(app);} else {// 系统应用myfilesystem.add(app);}}}@SuppressWarnings("deprecation")@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.main_usb_bt:flag=0;apksearch = new ApkSearchUtils(MainActivity.this);list = apksearch.getMyFiles();adapter = new PackBaseAdapter(MainActivity.this, list);lv.setAdapter(adapter);break;case R.id.main_xitong_bt:flag=2;getAllSystemAPP();adapter=new PackBaseAdapter(MainActivity.this, myfilesystem);lv.setAdapter(adapter);break;case R.id.main_putong_bt:flag=1;getAllSystemAPP();adapter=new PackBaseAdapter(MainActivity.this, myfilenosystem);lv.setAdapter(adapter);break;case R.id.main_guanbi:int version = android.os.Build.VERSION.SDK_INT;int pid = android.os.Process.myPid();            ActivityManager activityMgr = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);            if (version <= 7) {                   activityMgr.restartPackage(this.getPackageName());            } else {            activityMgr.killBackgroundProcesses(this.getPackageName());                   android.os.Process.killProcess(pid);break;}}}}
(6)

package com.shine.broadcast;import com.shine.apk.MainActivity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BpptReceiver extends BroadcastReceiver{MainActivity main;@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubmain=new MainActivity();//接收安装广播         if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {               String packageName = intent.getDataString();               System.out.println("安装了:" +packageName + "包名的程序");              String packageName1 = intent.getDataString().substring(8);                        System.out.println("---------------" + packageName1);                         Intent newIntent = new Intent();                         newIntent.setClassName(packageName1,packageName1+ "MainActivity");              newIntent.setAction("android.intent.action.MAIN");             newIntent.addCategory("android.intent.category.LAUNCHER");                      newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                        context.startActivity(newIntent);        }           //接收卸载广播          if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {               String packageName = intent.getDataString();               //main.getAllSystemAPP();            System.out.println("卸载了:"  + packageName + "包名的程序");         }}}

xml文件就不上传了,看这些代码就可以写出xml文件了。记录一下了。


原创粉丝点击