实例介绍
【实例简介】手机卫士源码,内涵apk,源码,密钥,关键地方含有注释
【实例截图】
【核心代码】
部分代码如下:
package com.mowen.mobilesafe; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.StatFs; import android.text.format.Formatter; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.ScaleAnimation; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.mowen.mobilesafe.domain.AppInfo; import com.mowen.mobilesafe.engine.AppInfoProvider; import com.mowen.mobilesafe.utils.DensityUtil; /** * ============================================================ * * 版权 :手机卫士 版权所有 (c) 2014 * * 作者:mowen * * 版本 :1.0 * * 创建日期 : 2014-9-10 上午12:45 * * 描述 :软件管理 * * 修订历史 : * * ============================================================ **/ public class AppManagerActivity extends Activity implements OnClickListener { private static final String TAG = "AppManagerActivity"; private TextView tv_avail_rom; private TextView tv_avail_sd; private ListView lv_appmanager; private LinearLayout ll_loading; private List<AppInfo> appInfos; private TextView tv_status; private LinearLayout ll_start; private LinearLayout ll_share; private LinearLayout ll_uninstall; /** * 被点击的条目 */ private AppInfo appInfo; /** * 用户程序集合 */ private List<AppInfo> userAppInfos; /** * 系统程序集合 */ private List<AppInfo> systemAppInfos; private PopupWindow popupWindow; private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { ll_loading.setVisibility(View.GONE); lv_appmanager.setAdapter(new AppInfoAdapter()); }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_app_manager); tv_avail_rom = (TextView) findViewById(R.id.tv_avail_rom); tv_avail_sd = (TextView) findViewById(R.id.tv_avail_sd); tv_avail_sd.setText("SD卡可用:" getTotalSpace(Environment.getExternalStorageDirectory() .getAbsolutePath())); tv_avail_rom.setText("内存可用:" getTotalSpace(Environment.getDataDirectory() .getAbsolutePath())); lv_appmanager = (ListView) findViewById(R.id.lv_appmanager); tv_status = (TextView) findViewById(R.id.tv_status); lv_appmanager.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Object obj = lv_appmanager.getItemAtPosition(position); if (obj != null) { dismissPopupWindow(); appInfo = (AppInfo) obj; View contentView = View.inflate(getApplicationContext(), R.layout.popup_item, null); ll_uninstall = (LinearLayout) contentView .findViewById(R.id.ll_uninstall); ll_start = (LinearLayout) contentView .findViewById(R.id.ll_start); ll_share = (LinearLayout) contentView .findViewById(R.id.ll_share); ll_share.setOnClickListener(AppManagerActivity.this); ll_start.setOnClickListener(AppManagerActivity.this); ll_uninstall.setOnClickListener(AppManagerActivity.this); // 播放动画有一个前提 就是窗体必须有背景 popupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); // ☆ 注意: 必须要设置背景 popupWindow.setBackgroundDrawable(new ColorDrawable( Color.TRANSPARENT)); int[] location = new int[2]; view.getLocationInWindow(location); //根据手机手机的分辨率 把60dip 转化成 不同的值 px int px = DensityUtil.dip2px(getApplicationContext(), 60); popupWindow.showAtLocation(parent, Gravity.TOP Gravity.LEFT, px, location[1]); AlphaAnimation aa = new AlphaAnimation(0.5f, 1.0f); aa.setDuration(200); ScaleAnimation sa = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0.5f); sa.setDuration(200); AnimationSet set = new AnimationSet(false); set.addAnimation(sa); set.addAnimation(aa); contentView.startAnimation(set); } } }); // tv_status.setPadding(0, 0, 0, 0); lv_appmanager.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { dismissPopupWindow(); if (userAppInfos != null && systemAppInfos != null) { if (firstVisibleItem > userAppInfos.size()) { tv_status.setText("系统程序(" systemAppInfos.size() ")"); } else { tv_status.setText("用户程序(" userAppInfos.size() ")"); } } } }); ll_loading = (LinearLayout) findViewById(R.id.ll_loading); fillData(); } private void fillData() { ll_loading.setVisibility(View.VISIBLE); new Thread() { public void run() { appInfos = AppInfoProvider.getAppInfos(getApplicationContext()); userAppInfos = new ArrayList<AppInfo>(); systemAppInfos = new ArrayList<AppInfo>(); for (AppInfo appinfo : appInfos) { if (appinfo.isUserApp()) { userAppInfos.add(appinfo); } else { systemAppInfos.add(appinfo); } } handler.sendEmptyMessage(0); }; }.start(); } /** * 获取某个路径可用的空间 * * @param path * @return */ public String getTotalSpace(String path) { StatFs stat = new StatFs(path); long count = stat.getAvailableBlocks(); long size = stat.getBlockSize(); return Formatter.formatFileSize(this, count * size); } private void dismissPopupWindow() { if (popupWindow != null && popupWindow.isShowing()) { popupWindow.dismiss(); popupWindow = null; } } private class AppInfoAdapter extends BaseAdapter { @Override public int getCount() { // 多了两个textview的item 所以 1 1 return userAppInfos.size() 1 systemAppInfos.size() 1; } // 控制每个位置显示的内容。 @Override public View getView(int position, View convertView, ViewGroup parent) { final AppInfo appInfo; if (position == 0) {// 显示一个textview告诉用户有多少个用户应用 TextView tv = new TextView(getApplicationContext()); tv.setText("用户程序 (" userAppInfos.size() ")"); tv.setTextColor(Color.WHITE); tv.setBackgroundColor(Color.GRAY); return tv; } else if (position == (userAppInfos.size() 1)) { TextView tv = new TextView(getApplicationContext()); tv.setText("系统程序 (" systemAppInfos.size() ")"); tv.setTextColor(Color.WHITE); tv.setBackgroundColor(Color.GRAY); return tv; } else if (position <= userAppInfos.size()) { // 用户程序。 int newposition = position - 1; appInfo = userAppInfos.get(newposition); } else { // 系统程序 int newposition = position - 1 - userAppInfos.size() - 1; appInfo = systemAppInfos.get(newposition); } View view; ViewHolder holder; if (convertView != null && convertView instanceof RelativeLayout) { view = convertView; holder = (ViewHolder) view.getTag(); } else { view = View.inflate(getApplicationContext(), R.layout.list_app_item, null); holder = new ViewHolder(); holder.iv = (ImageView) view.findViewById(R.id.iv_icon); holder.tv_name = (TextView) view.findViewById(R.id.tv_name); holder.tv_location = (TextView) view .findViewById(R.id.tv_location); view.setTag(holder); holder.bt_uninstall = (Button) view.findViewById(R.id.bt_uninstall); } holder.tv_location.setTextColor(Color.GRAY); holder.iv.setImageDrawable(appInfo.getIcon()); holder.tv_name.setText(appInfo.getName()); if (appInfo.isInRom()) { holder.tv_location.setText("手机内存"); } else { holder.tv_location.setText("外部存储卡"); } holder.bt_uninstall.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { uninstall(appInfo); } }); return view; } @Override public Object getItem(int position) { AppInfo appInfo; if (position == 0) {// 显示一个textview告诉用户有多少个用户应用 return null; } else if (position == (userAppInfos.size() 1)) { return null; } else if (position <= userAppInfos.size()) { // 用户程序。 int newposition = position - 1; appInfo = userAppInfos.get(newposition); } else { // 系统程序 int newposition = position - 1 - userAppInfos.size() - 1; appInfo = systemAppInfos.get(newposition); } return appInfo; } @Override public long getItemId(int position) { return 0; } } static class ViewHolder { ImageView iv; TextView tv_name; TextView tv_location; Button bt_uninstall; } @Override public void onClick(View v) { dismissPopupWindow(); switch (v.getId()) { case R.id.ll_share: Log.i(TAG, "分享:" appInfo.getName()); shareApplication(); break; case R.id.ll_start: Log.i(TAG, "启动:" appInfo.getName()); startApplication(); break; case R.id.ll_uninstall: Log.i(TAG, "卸载:" appInfo.getName()); uninstall(appInfo); break; } } /** * 开启应用 */ private void startApplication() { Intent intent = new Intent(); String packname = appInfo.getPackname(); PackageManager pm = getPackageManager(); try { PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_ACTIVITIES); ActivityInfo[] activityInfos = packinfo.activities; if(activityInfos!=null&&activityInfos.length>0){ ActivityInfo activityinfo = activityInfos[0]; intent.setClassName(packname, activityinfo.name); startActivity(intent); }else{ Toast.makeText(this, "哎呀,这个应用程序没界面", 0).show(); } } catch (NameNotFoundException e) { e.printStackTrace(); Toast.makeText(this, "没法开这个应用。", 0).show(); } } /** * 分享应用程序 */ private void shareApplication() { Intent intent = new Intent(); // <action android:name="android.intent.action.SEND" /> // <category android:name="android.intent.category.DEFAULT" /> // <data android:mimeType="text/plain" /> intent.setAction("android.intent.action.SEND"); intent.addCategory("android.intent.category.DEFAULT"); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, "推荐你使用一个软件,软件的名称叫:" appInfo.getName() ",下载地址:https://play.google.com/store/apps/details?id=" appInfo.getPackname()); startActivity(intent); } private void uninstall(AppInfo appInfo) { if (appInfo.isUserApp()) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_DELETE); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" appInfo.getPackname())); startActivityForResult(intent, 0); } else { Toast.makeText(this, "系统应用需要有root权限后才能卸载", 0).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); fillData(); } }
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论