Androidパッケージの一括削除を実現

11084 ワード

携帯電話のメモリが限られているため、一度に複数のパケットを削除する必要がある場合があります.この場合、Androidパケットの一括削除を実現するアプリケーションが必要です.
まず、レイアウトファイル:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >



    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="match_parent"

        android:layout_weight="5" >



        <TextView

            android:id="@+id/textView1"

            style="@style/my_style"

            android:layout_width="match_parent"

            android:layout_height="fill_parent"

            android:layout_weight="4" />



        <TextView

            android:id="@+id/textView2"

            style="@style/my_style"

            android:layout_width="match_parent"

            android:layout_height="fill_parent"

            android:layout_gravity="center_vertical|center_horizontal"

            android:layout_weight="1"

            android:gravity="center_vertical|center_horizontal"

            android:text="    " />



        <TextView

            android:id="@+id/textView3"

            android:layout_width="match_parent"

            android:layout_height="fill_parent"

            android:layout_weight="4"

            android:gravity="center_vertical|center_horizontal"

            android:text="      " />



    </LinearLayout>

    

    <ListView

        android:id="@id/android:list"

        android:layout_width="fill_parent"

        android:layout_height="match_parent"

        android:layout_weight="1" >



    </ListView>



    <Button

        android:id="@+id/btn_apk"

        style="@style/my_style"

        android:layout_width="fill_parent"

        android:layout_height="match_parent"

        android:layout_weight="5"

        android:text="  " />



</LinearLayout>


レイアウトファイルは比較的簡単で、最も重要なのはリストです.
次にクラスファイル:
package com.hzhi.sysinfor;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



import android.app.AlertDialog;

import android.app.ListActivity;

import android.app.ProgressDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.graphics.drawable.Drawable;

import android.net.Uri;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.CompoundButton;

import android.widget.CompoundButton.OnCheckedChangeListener;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;



public class apk<PackageDeleteObserver> extends ListActivity{

	

	Button btn_unload;

	PackageManager pkg_man;

	PackageDeleteObserver pkg_obs;

	list_apk list_ada;

	

	//          

	public void get_app(){ 

		

		list_ada = new list_apk(this);

        

		//     

		PackageManager pm = getPackageManager();

		//          

		List<PackageInfo> pi = pm.getInstalledPackages(0); 

		

		for (int i=0; i<pi.size(); i++){

			

			PackageInfo pii = (PackageInfo) pi.get(i);

			String is_sys;

			Drawable icon;

			

			//       

			if ((pii.applicationInfo.flags & pii.applicationInfo.FLAG_SYSTEM) <= 0)

				is_sys = " ";

			else

				is_sys = " ";



			if (pii.applicationInfo.loadIcon(pm) != null)

				icon = (Drawable)pii.applicationInfo.loadIcon(pm);

			else

				icon = (Drawable) getResources().getDrawable(R.drawable.ic_launcher);



			

			list_ada.addItem(String.valueOf(pii.applicationInfo.loadLabel(pm)),

					is_sys, 

					icon,

					pii.applicationInfo.packageName,

					false);			

			

		}

        

        setListAdapter(list_ada);

	}

	

	@Override

	protected void onCreate(Bundle savedInstanceState) {

		

		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_list_apk);

		

		get_app();



        

        btn_unload = (Button) findViewById(R.id.btn_apk);

        btn_unload.setOnClickListener(new View.OnClickListener() {

			

			@Override

			public void onClick(View v) {



				for (int j=0; j<list_ada.list_data.size(); j++){

					

					//        

					if (list_ada.list_data.get(j).is_chk){						

						

						String name = (String) 

								list_ada.list_data.get(j).
                                            txt_name.getText(); final String pak = list_ada.list_data.get(j).item_pak; new AlertDialog.Builder(apk.this) .setTitle(" ") .setMessage(" " + name + " ?") .setPositiveButton(" ",
                                  new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1)
                                     { unload(pak); get_app(); } }) .setNegativeButton(" ", null) .show(); } } } }); } @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; } public boolean unload (String n){ boolean res = true; try{ // URI Uri pu = Uri.parse("package:" + n); // Intent Intent i = new Intent(Intent.ACTION_DELETE, pu); // startActivity(i); res = true; } catch(Exception e){ res = false; } finally{ return res; } } } //apk class list_apk extends BaseAdapter implements OnClickListener{ public Context ctx; public List<item_apk> list_data; public list_apk(Context context){ ctx = context; list_data = new ArrayList<item_apk>(); } @Override public int getCount() { // TODO Auto-generated method stub return list_data.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return list_data.get(arg0); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return list_data.indexOf(arg0); } @Override public View getView(int position, View convertView, ViewGroup parent) { item_apk my_item; Integer i = 0; if (convertView == null) { my_item = new item_apk(ctx, (String)list_data.get(position).txt_name.getText(), (String)list_data.get(position).txt_flag.getText(), list_data.get(position).img_apk.getDrawable(), list_data.get(position).item_pak, list_data.get(position).is_chk); } else { my_item = (item_apk)convertView; my_item.txt_name.setText(list_data.get(position).txt_name.getText()); my_item.txt_flag.setText(list_data.get(position).txt_flag.getText()); my_item.img_apk.setImageDrawable(list_data.get(position).img_apk.getDrawable()); } CheckBox chk_item = (CheckBox) my_item.chk_apk; chk_item.setOnClickListener(this); if (list_data.get(position).is_chk) Log.i(String.valueOf(position) + ".is_chk=", "true"); else Log.i(String.valueOf(position) + ".is_chk=", "false"); chk_item.setChecked(list_data.get(position).is_chk); chk_item.setTag(position); return my_item; } public void addItem(String txt_name, String txt_flag, Drawable ico_apk, String str_name, Boolean bol_chk) { list_data.add(new item_apk(ctx,txt_name,txt_flag,ico_apk,str_name,bol_chk)); } @Override public void onClick(View v) { // TODO Auto-generated method stub CheckBox c = (CheckBox) v; int pos = Integer.parseInt(v.getTag().toString()); list_data.get(pos).is_chk = c.isChecked(); } } //apk class item_apk extends LinearLayout{ public CheckBox chk_apk; public TextView txt_name; public TextView txt_flag; public ImageView img_apk; public String item_pak; public boolean is_chk; public item_apk(Context ctx, String item_name, String item_flag, Drawable item_draw, String str_name, Boolean bol_chk) { super(ctx); this.setOrientation(HORIZONTAL); int hei = 60; chk_apk = new CheckBox(ctx); addView(chk_apk, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); img_apk = new ImageView(ctx); img_apk.setImageDrawable(item_draw); addView(img_apk, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); txt_name = new TextView(ctx); txt_name.setText(item_name); addView(txt_name, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.4),hei)); txt_flag = new TextView(ctx); txt_flag.setText(item_flag); addView(txt_flag, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); item_pak = str_name; is_chk = bol_chk; } }

全部で3つのクラスを実現しました:apk、list_apk、item_apk.ApkはActivity全体のクラス、list_apkはリストのアダプタクラス、item_apkはリストの1行のクラスです.list_apkのlist_dataは重要な変数であり、パケット名、システムアプリケーションであるかどうか、選択されているかどうかなど、各パケットの情報を記録する.
[アンインストール]ボタンをクリックすると、list_を巡回します.dataのすべての要素は、選択されているかどうかを判断し、選択されている場合は削除します.
実行効果は次のとおりです.
实现Android包的批量删除
实现Android包的批量删除
实现Android包的批量删除
实现Android包的批量删除
实现Android包的批量删除
实现Android包的批量删除
選択した2つのパッケージが削除されていることがわかります.