Android:实现隐藏应用功能(续)

来源:互联网 发布:linux服务器宕机 编辑:程序博客网 时间:2024/06/07 20:18

主要布局文件:

mian.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"    ><TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    /><GridView android:id="@+id/myGrid"        android:layout_width="fill_parent"     android:layout_height="fill_parent"    android:padding="10dp"    android:verticalSpacing="10dp"    android:horizontalSpacing="10dp"    android:numColumns="auto_fit"    android:columnWidth="60dp"    android:stretchMode="columnWidth"    android:gravity="center"    /> </LinearLayout>

gird_item.xmlbu布局文件如下
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/GridItem"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:orientation="vertical"   android:gravity="center_horizontal"   android:background="#000080">   <imageview android:id="@+id/grid_item_image"      android:layout_width="wrap_content"      android:layout_height="wrap_content">   </imageview>   <textview android:id="@+id/grid_item_text"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="TextView"      android:gravity="center_horizontal"      android:textColor="#000000">   </textview></linearlayout>

与数据库相关的操作

AppsDB.java

package gridview_3.com;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class AppsDB extends SQLiteOpenHelper {    private final static String DATABASE_NAME = "Apps.db";    private final static int DATABASE_VERSION = 1;    private final static String TABLE_NAME = "apps_table";    public final static String APP_ID = "app_id";    public final static String APP_PACKAGENAME = "app_packagename";    public final static String APP_FLAG = "app_flag";    public AppsDB(Context context) {        // TODO Auto-generated constructor stub        super(context, DATABASE_NAME, null, DATABASE_VERSION);    }    // 创建table    @Override    public void onCreate(SQLiteDatabase db) {        String sql = "CREATE TABLE " + TABLE_NAME + " (" + APP_ID                + " INTEGER primary key autoincrement, " + APP_PACKAGENAME                + " text, " + APP_FLAG + " text);";        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;        db.execSQL(sql);        onCreate(db);    }    public Cursor select() {        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db                .query(TABLE_NAME, null, null, null, null, null, null);        return cursor;    }    // 增加操作    public long insert(String packagename, String flag) {        SQLiteDatabase db = this.getWritableDatabase();        /* ContentValues */        ContentValues cv = new ContentValues();        cv.put(APP_PACKAGENAME, packagename);        cv.put(APP_FLAG, flag);        long row = db.insert(TABLE_NAME, null, cv);        return row;    }    // 删除操作    public void delete(String packagename) {        SQLiteDatabase db = this.getWritableDatabase();        String where = APP_PACKAGENAME + " = ?";        String[] whereValue = { packagename };        db.delete(TABLE_NAME, where, whereValue);    }    // 修改操作    public int update(String packagename, String flag) {        SQLiteDatabase db = this.getWritableDatabase();        String where = APP_PACKAGENAME + " = ?";        String[] whereValue = { packagename };        ContentValues cv = new ContentValues();        // cv.put(APP_PACKAGENAME, packagename);        cv.put(APP_FLAG, flag);        int mLine = db.update(TABLE_NAME, cv, where, whereValue);        return mLine;    }}

GridViewTest.java

package gridview_3.com;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Set;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.pm.ResolveInfo;import android.database.Cursor;import android.graphics.Color;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.ImageView.ScaleType;public class GridViewTest extends Activity {    private GridView myGrid;    private List<ResolveInfo> mApps;    @SuppressWarnings({ "unchecked", "rawtypes" })    private List<ResolveInfo> mDisApps = new ArrayList();    private IconsAdapter iconsAdapter = new IconsAdapter(mDisApps);    private AppsDB mAppsDB;    private Cursor mCursor;    @SuppressWarnings("rawtypes")    HashMap hm = new HashMap();    @SuppressWarnings("unchecked")    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        mAppsDB = new AppsDB(this);        mCursor = mAppsDB.select();        loadApps();        getDisApps();        setContentView(R.layout.main);        // mAppsDB = new AppsDB(this);        // mCursor = mAppsDB.select();        myGrid = (GridView) findViewById(R.id.myGrid);        // iconsAdapter = new IconsAdapter(mDisApps);        myGrid.setAdapter(iconsAdapter);        myGrid.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> arg0, View arg1, int index,                    long arg3) {                try {                    Intent it = new Intent(Intent.ACTION_VIEW);                    ComponentName componentName = new ComponentName(mDisApps                            .get(index).activityInfo.packageName, mDisApps                            .get(index).activityInfo.name);                    it.setComponent(componentName);                    startActivity(it);                } catch (Exception e) {                    e.printStackTrace();                }                /*                 * mApps.remove(index);                 * iconsAdapter.notifyDataSetChanged();                 */            }        });        /** 长按改变图标的透明度和标志位 */        myGrid.setOnItemLongClickListener(new OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,                    int index, long arg3) {                Object mPackageName = arg1.getTag();                boolean mFlag = Boolean.parseBoolean(hm.get(mPackageName).toString());                if (mFlag) {                    // mDisApps.get(index).activityInfo.loadIcon(                    // getPackageManager()).setAlpha(100);                    arg1.setBackgroundColor(Color.RED);                    hm.put(mPackageName, false);                    Log.v("长按", "隐藏");                    Log.v("Flag", hm.get(mPackageName).toString());                } else {                    // mDisApps.get(index).activityInfo.loadIcon(                    // getPackageManager()).setAlpha(255);                    arg1.setBackgroundColor(Color.BLACK);                    hm.put(mPackageName, true);                    Log.v("长按", "显示");                    Log.v("Flag", hm.get(mPackageName).toString());                }                return true;            }        });    }    @Override    public void onStop() {        super.onStop();        Log.v("onStop()", "~~~onStop");        @SuppressWarnings("rawtypes")        Set mset = hm.keySet();        /* 保存用户当前的设置 */        for (Object mPackageName : mset) {            /* 果然更新的行数为0,表示用新装载的应用,这要调用insert()方法 */            int mLineNum = mAppsDB.update(mPackageName.toString(),                    hm.get(mPackageName).toString());            mCursor.requery();            if (0 == mLineNum) {                mAppsDB.insert(mPackageName.toString(), hm.get(mPackageName)                        .toString());                mCursor.requery();            }        }        Log.v("onStop()", "~~~onStop~~~~");    }    /** 设置两个按钮,“显示所有”和“显示/隐藏” */    public boolean onCreateOptionsMenu(Menu menu) {        menu.add(0, 0, 0, R.string.all);        menu.add(0, 1, 1, R.string.display_hide);        return super.onCreateOptionsMenu(menu);    }    public boolean onOptionsItemSelected(MenuItem item) {        super.onOptionsItemSelected(item);        switch (item.getItemId()) {        case 0:            iconsAdapter = new IconsAdapter(mApps);            myGrid.setAdapter(iconsAdapter);            break;        case 1:            getDisApps();            iconsAdapter = new IconsAdapter(mDisApps);            myGrid.setAdapter(iconsAdapter);            break;        }        return true;    }    @SuppressWarnings("unchecked")    public void loadApps() {        Intent i = new Intent(Intent.ACTION_MAIN, null);        i.addCategory(Intent.CATEGORY_LAUNCHER);        if (mApps != null) {            mApps.clear();        }        mApps = getPackageManager().queryIntentActivities(i, 0);        /* 重构HashMap,为每个应用程序设置是否显示的标志:true 为显示,false为隐藏 */        if (hm != null) {            hm.clear();        }        for (int i1 = 0; i1 < mApps.size(); i1++) {            hm.put(mApps.get(i1).activityInfo.packageName, true);        }        /* 读取用户之前的设置信息 */        @SuppressWarnings("rawtypes")        Set ms = hm.keySet();        // if ( !mCursor.isNull(1)) {        for (mCursor.moveToFirst(); !(mCursor.isAfterLast()); mCursor                .moveToNext()) {            if (ms.contains(mCursor.getString(1))) {                /* 在hm中存在,这从SQLite中读取并更新hm */                hm.put(mCursor.getString(1), mCursor.getString(2));            } else {                /* 不在hm中,说明用户卸载了应用,应该从SQLite中删除该记录 */                mAppsDB.delete(mCursor.getString(1));                mCursor.requery();            }        }        // }    }    /** 构建显示图标的程序的List */    public void getDisApps() {        if (!mDisApps.isEmpty()) {            mDisApps.clear();        }        for (int i = 0; i < hm.size(); ++i) {            boolean mFlag = Boolean.parseBoolean(hm.get(                    mApps.get(i).activityInfo.packageName).toString());            if (mFlag) {                mDisApps.add(mApps.get(i));            }        }        Log.v("getDisApps()", "msg");    }    public class IconsAdapter extends BaseAdapter {        private List<ResolveInfo> list;        public IconsAdapter(List<ResolveInfo> list) {            super();            this.list = list;        }        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int position) {            return list.get(position);        }        // // 通过这个api来动态通知adapter需要更新界面        // @Override        // public void notifyDataSetChanged() {        // super.notifyDataSetChanged();        // }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ImageView mImageView;            if (null == convertView) {                mImageView = new ImageView(GridViewTest.this);                mImageView.setScaleType(ScaleType.FIT_CENTER);                mImageView.setLayoutParams(new GridView.LayoutParams(50, 50));            } else {                mImageView = (ImageView) convertView;            }            ResolveInfo info = list.get(position);            mImageView.setImageDrawable(info.activityInfo                    .loadIcon(getPackageManager()));            Object mPackageName = info.activityInfo.packageName;            boolean Flag = Boolean.parseBoolean(hm.get(mPackageName).toString());            /* 区别隐藏的图标在显示所用中的不同状态 */            if (Flag) {                mImageView.setBackgroundColor(Color.BLACK);            } else {                mImageView.setBackgroundColor(Color.RED);            }            /* 给在GridView中的显示的每个View调用一个 setTag()方法,用来确定一个应用程序 */            mImageView.setTag(mPackageName);            return mImageView;        }    }}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果4s电池越来越不耐用怎么办 苹果4s电池不耐用了怎么办 苹果手机4s电池不耐用怎么办 红米4s电池不耐用怎么办 32位app私密相册打不开怎么办 红米手机取卡针断手机里了怎么办 我差评了客服打电话骂我怎么办 顺丰快递在预计时间没有回来怎么办 同款商品比京东便宜怎么办 京东自营不支持7天退货怎么办 天猫买了一个月的电动车坏了怎么办 发票号码和机打号码不一致怎么办 交电费的本子弄丢了怎么办 快递正在派件中发现地址错了怎么办 快递当天送达当天签收还算延怎么办 深圳国税公众号预约取号公司怎么办 社保买了停了2年怎么办 qq号被冻结申请不回来了怎么办 qq号被冻结 手机密保忘了怎么办 微信账号封了2天怎么办 买qq号被申诉找回了怎么办 收到了京东白条的催款通知单怎么办 成都买房社保不够两年怎么办18年 电话号码给人设置成骚扰电话怎么办 找不到领导电话不接短信不回怎么办 微信账号被别人手机号冻结了怎么办 微信冻结了手机号也让人换了怎么办 顺丰快递拒收退回丢件了怎么办 京东买东西快递电话没有听到怎么办 在京东购物自己电话号输错了怎么办 北京房子卖了户口没地方迁怎么办 微信弄丢了微信密码找不到了怎么办 微信背人用过找不到密码怎么办 超市的微信支付宝收付款怎么办 办理联华超市的会员储蓄卡怎么办 卡杰文具密码本如果忘记密码怎么办 火狐浏览器阻止要访问的网页怎么办 点我达被永久停用了怎么办 刚下的软件点开系统显示停用怎么办 红酒洋酒啤酒一起喝胃不舒服怎么办 儿子13岁初一不想读书了怎么办