safe08

1.获取正在运行的进程
List<RunningAppProcessInfo> runningappInfos = am.getRunningAppProcesses(); 获取所有正在运行的进程信息
for (RunningAppProcessInfo info : runingappsInfos) {
int pid = info.pid; 通过进程信息获取进程的pid
String packname = info.processName; 获取正在运行的进程的进程名字(也就是包名)
long memsize = am.getProcessMemoryInfo(new int[] { pid })[0].getTotalPrivateDirty() * 1024; 获取进程的内存大小
}

由于程序的名称和图标在清单文件中的 application 节点下,所以
PackageManager pm = context.getPackageManager();
ApplicationInfo applicationInfo = pm.getApplicationInfo(packname, 0);

Drawable drawable = applicationInfo.loadIcon(pm); 获取图标
String appname = applicationInfo.loadLable(pm); 获取应用程序名称

2. /**
* 三方应用的过滤器,如果返回值为
* @param info
* @return true 三方应用 false 系统应用
*/
public boolean filterApp(ApplicationInfo info) {
if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
return true;
} else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
return true;
}
return false;
}

3.杀死一个进程,需要 android.permission.KILL_BACKGROUND_PROCESSES 权限
ActivityManager am = getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses(packageName);

4.定义一个widget
1.定义一个类继承 AppWidgetProvider
2.清单文件中配置
   <receiver android:name=".MyWidget" >
             <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
             </intent-filter>
             <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/example_appwidget_info" />
           </receiver>
        3.资源文件里建立 xml/example_appwidget_info.xml文件
4.在example_appwidget_info.xml文件里配置
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/main"
android:minHeight="72dp"
android:minWidth="294dp"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="1800000" > //最少30分钟
</appwidget-provider>
    

5.widget的生命周期:
1.当第一个widget被加载到界面上的时候
on enable
on receive
on update
on receive
2.当第二个或第三个 widget 加载到界面的时候
on update
on receive
3.当widget被移除的时候
ondelete
on receive
4.最后一个条目从界面上移除
on delete
on receive
on disable
on receive

6.onenable执行一些widget的初始化的操作.
  ondisable执行一些擦屁股的

  注意:onreceive 和 onUpdate方法他的调用顺序可能不确定.
  这些方法的调用执行的顺序 跟桌面的luncher应用有关.

7.获取widget的管理器,AppWidgetManager
AppWidgetManager awm = AppWidgetManager.getInstance(context);
  定义widget的组件名
ComponentName component = new ComponentName(getPackageName(), "it.heima.mobilesafe.receiver.MyWidget");
  因为这个view对象是显示在桌面进程里的,所以它是一个远程的view对象
RemotetViews views = new RemoteViews(getPackageName(), R.layout.process_widget);
  设置view显示的内容
views.setTextViewText(R.id.process_count, "进程数目:"+SystemInfoUtil.getProcessCount(context));
  更新widget的内容
awm.updateAppWidget(component, views);

8.定义一个延期意图,getBroadcast方法,用于开启一个广播接受者
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

9.ExpandableListView 可扩展的listView

10.获取2g/3g流量的信息
     下载:long mobilerx = TrafficStats.getMobileRxBytes();
     上传:long mobiletx = TrafficStats.getMobileTxBytes();

11.获取所有安装的程序,包括那些卸载的但没有卸载干净的程序。并且获取这些程序的permission权限信息,存入packageInfos
List<PackageInfo> packageInfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES|PackageManager.GET_PERMISSIONS);
for(PackageInfo info:packageInfos){
获取这个程序的权限信息:
        String[] permissions = info.requestedPermissions;
获取这个程序的uid
int uid = info.applicationInfo.uid;
通过uid获取这个程序的下载流量
long totalrx = TrafficStats.getUidRxBytes(uid);
通过uid获取这个程序的上传流量
long totaltx = TrafficStats.getUidTxBytes(uid);
}

12.把数字格式化成字符串
Formatter.formatFileSize(context, memsize)

13.通过ActivityManager可以获取系统正在运行的 服务,进程,程序。
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
1.List<RunningServiceInfo> serviceInfos = am.getRunningServices(100); 获取所有正在运行的服务信息
2.List<RunningAppProcessInfo> runningAppInfos = am.getRunningAppProcessInfos() 获取所有正在运行的进程信息
3.List<RunningTaskInfo> infos = am.getRunningTasks(3); 获取系统正在运行的任务栈信息

14.锁屏自动杀死所有进程的原理:
1.锁屏是一个广播,定义一个广播接受者接收锁屏的广播
2.定义一个服务,服务里面注册这个广播,
3.当开启这个服务的时候,只要接收到锁屏的广播,在广播接收者里的onReceive()方法里面杀死这些进程
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo>  processInfos = am.getRunningAppProcesses();
for(RunningAppProcessInfo info : processInfos){
am.killBackgroundProcesses(info.processName);
}
4.当服务关闭的时候,反注册掉这个广播接收者。

15.ExpandableListView(可扩展的listview)
给ExpandableListView设置数据适配器为 继承BaseExpandableListAdapter类。

16.BaseExpandableListAdapter适配器的isChildSelectable返回为true时,孩子列表的选项可选
给ExpandableListView设置孩子点击事件
setOnChildClickListener(new OnChildClickListener())

猜你喜欢

转载自xpchou.iteye.com/blog/1637557