当前位置: 首页 > news >正文

网站接入支付宝需要网站备案吗北京搭建工厂

网站接入支付宝需要网站备案吗,北京搭建工厂,合肥网站建设平台,可以去非菲律宾做游戏网站吗http://blog.csdn.net/qinjuning/article/details/6892054 通过第一部分Android中获取应用程序(包)的信息-----PackageManager的使用(一) 的介绍#xff0c;对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识。 本部分的内…http://blog.csdn.net/qinjuning/article/details/6892054 通过第一部分Android中获取应用程序(包)的信息-----PackageManager的使用(一) 的介绍对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识。 本部分的内容是如何获取安装包得大小包括缓存大小(cachesize)、数据大小(datasize)、应用程序大小(codesize)。 本部分的知识点涉及到AIDL、Java反射机制。理解起来也不是很难。 关于安装包得大小信息封装在PackageStats类中该类很简单只有几个字段 PackageStats类 常用字段 public long cachesize           缓存大小 public long codesize             应用程序大小 public long datasize              数据大小 public String packageName  包名 PS应用程序的总大小 cachesize  codesize  datasize 也就是说只要获得了安装包所对应的PackageStats对象就可以获得信息了。但是在AndroidSDK中并没有显示提供方法来 获得该对象是不是很苦恼呢但是我们可以通过放射机制来调用系统中隐藏的函数(hide)来获得每个安装包得信息。 具体方法如下 第一步、  通过放射机制调用getPackageSizeInfo()  方法原型为               /*param packageName 应用程序包名 *param observer 当查询包得信息大小操作完成后将回调给IPackageStatsObserver类中的onGetStatsCompleted()方法 * ,并且我们需要的PackageStats对象也封装在其参数里. * hide //隐藏函数的标记 */ public abstract void getPackageSizeInfo(String packageName,IPackageStatsObserver observer);{ // } 内部调用流程如下这个知识点较为复杂知道即可 getPackageSizeInfo方法内部调用getPackageSizeInfoLI(packageName, pStats)方法来完成包状态获取。 getPackageSizeInfoLI方法内部调用Installer.getSizeInfo(String pkgName, String apkPath,String fwdLockApkPath,   PackageStats pStats)继而将包状态信息返回给参数pStats。getSizeInfo这个方法内部是以本机Socket方式连接到Server 然后向server发送一个文本字符串命令格式getsize apkPath fwdLockApkPath 给server。Server将结果返回并解析到pStats 中。掌握这个调用知识链即可。 第二步、  由于需要获得系统级的服务或类我们必须加入Android系统形成的AIDL文件共两个 IPackageStatsObserver.aidl 和 PackageStats.aidl文件。并将其放置在android.pm.content包路径下。 IPackageStatsObserver.aidl 文件 package android.content.pm; import android.content.pm.PackageStats; /** * API for package data change related callbacks from the Package Manager. * Some usage scenarios include deletion of cache directory, generate * statistics related to code, data, cache usage(TODO) * {hide} */ oneway interface IPackageStatsObserver { void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); } PackageStats.aidl文件 package android.content.pm; parcelable PackageStats; 第三步、  创建一个类继承至IPackageStatsObserver.Stub (桩)它本质上实现了Binder机制。当我们把该类的一个实例通过getPackageSizeInfo()调用时并该函数继而启动了启动中间流程去获取相关包得信息大小当扫描完成后最后将查询信息回调至该类的onGetStatsCompleted(in PackageStats pStats, boolean succeeded)方法信息大小封装在此实例上。例如 //aidl文件形成的Bindler机制服务类 public class PkgSizeObserver extends IPackageStatsObserver.Stub{ /*** 回调函数 * param pStatus ,返回数据封装在PackageStats对象中 * param succeeded 代表回调成功 */ Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { // TODO Auto-generated method stub cachesize pStats.cacheSize ; //缓存大小 datasize pStats.codeSize ; //数据大小 codesize pStats.codeSize ; //应用程序大小 } } 第四步、  最后我们可以获取 pStats的属性获得它们的属性值通过调用系统函数Formatter.formateFileSize(long size)转换 为对应的以kb/mb为计量单位的字符串。 很重要的一点为了能够通过反射获取应用程序大小我们必须加入以下权限否则会出现警告并且得不到实际值。 uses-permission android:nameandroid.permission.GET_PACKAGE_SIZE/uses-permission 流程图如下 Demo说明 在第一部分应用得基础上我们添加了一个新功能点击任何一个应用后后弹出显示该应用的包信息大小的对话框。 截图如下 1、dialg_app_size.xml 文件 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:orientationvertical android:layout_widthwrap_content android:layout_heightwrap_content LinearLayout android:layout_widthwrap_content android:layout_heightwrap_content android:orientationhorizontal TextView android:layout_width100dip android:layout_heightwrap_content android:text缓存大小:/TextView TextView android:layout_width100dip android:idid/tvcachesize android:layout_heightwrap_content/TextView /LinearLayout LinearLayout android:layout_widthwrap_content android:layout_heightwrap_content android:orientationhorizontal TextView android:layout_width100dip android:layout_heightwrap_content android:text数据大小:/TextView TextView android:layout_width100dip android:idid/tvdatasize android:layout_heightwrap_content/TextView /LinearLayout LinearLayout android:layout_widthwrap_content android:layout_heightwrap_content android:orientationhorizontal TextView android:layout_width100dip android:layout_heightwrap_content android:text应用程序大小:/TextView TextView android:layout_width100dip android:idid/tvcodesize android:layout_heightwrap_content/TextView /LinearLayout LinearLayout android:layout_widthwrap_content android:layout_heightwrap_content android:orientationhorizontal TextView android:layout_width100dip android:layout_heightwrap_content android:text总大小:/TextView TextView android:layout_width100dip android:idid/tvtotalsize android:layout_heightwrap_content/TextView /LinearLayout /LinearLayout 2、另外的资源文件或自定义适配器复用了第一部分请知悉。 3、添加AIDL文件如上。 4、主文件MainActivity.java如下 package com.qin.appsize; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.qin.appsize.AppInfo; import android.app.Activity; import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.IPackageStatsObserver; import android.content.pm.PackageManager; import android.content.pm.PackageStats; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.RemoteException; import android.text.format.Formatter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity implements OnItemClickListener{ private static String TAG APP_SIZE; private ListView listview null; private ListAppInfo mlistAppInfo null; LayoutInflater infater null ; //全局变量保存当前查询包得信息 private long cachesize ; //缓存大小 private long datasize ; //数据大小 private long codesize ; //应用程序大小 private long totalsize ; //总大小 Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.browse_app_list); listview (ListView) findViewById(R.id.listviewApp); mlistAppInfo new ArrayListAppInfo(); queryAppInfo(); // 查询所有应用程序信息 BrowseApplicationInfoAdapter browseAppAdapter new BrowseApplicationInfoAdapter( this, mlistAppInfo); listview.setAdapter(browseAppAdapter); listview.setOnItemClickListener(this); } // 点击弹出对话框显示该包得大小 public void onItemClick(AdapterView? arg0, View view, int position,long arg3) { //更新显示当前包得大小信息 queryPacakgeSize(mlistAppInfo.get(position).getPkgName()); infater (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View dialog infater.inflate(R.layout.dialog_app_size, null) ; TextView tvcachesize (TextView) dialog.findViewById(R.id.tvcachesize) ; //缓存大小 TextView tvdatasize (TextView) dialog.findViewById(R.id.tvdatasize) ; //数据大小 TextView tvcodesize (TextView) dialog.findViewById(R.id.tvcodesize) ; // 应用程序大小 TextView tvtotalsize (TextView) dialog.findViewById(R.id.tvtotalsize) ; //总大小 //类型转换并赋值 tvcachesize.setText(formateFileSize(cachesize)); tvdatasize.setText(formateFileSize(datasize)) ; tvcodesize.setText(formateFileSize(codesize)) ; tvtotalsize.setText(formateFileSize(totalsize)) ; //显示自定义对话框 AlertDialog.Builder builder new AlertDialog.Builder(MainActivity.this) ; builder.setView(dialog) ; builder.setTitle(mlistAppInfo.get(position).getAppLabel()的大小信息为) ; builder.setPositiveButton(确定, new DialogInterface.OnClickListener() { Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.cancel() ; // 取消显示对话框 } }); builder.create().show() ; } public void queryPacakgeSize(String pkgName) throws Exception{ if ( pkgName ! null){ //使用放射机制得到PackageManager类的隐藏函数getPackageSizeInfo PackageManager pm getPackageManager(); //得到pm对象 try { //通过反射机制获得该隐藏函数 Method getPackageSizeInfo pm.getClass().getDeclaredMethod(getPackageSizeInfo, String.class,IPackageStatsObserver.class); //调用该函数并且给其分配参数 待调用流程完成后会回调PkgSizeObserver类的函数 getPackageSizeInfo.invoke(pm, pkgName,new PkgSizeObserver()); } catch(Exception ex){ Log.e(TAG, NoSuchMethodException) ; ex.printStackTrace() ; throw ex ; // 抛出异常 } } } //aidl文件形成的Bindler机制服务类 public class PkgSizeObserver extends IPackageStatsObserver.Stub{ /*** 回调函数 * param pStatus ,返回数据封装在PackageStats对象中 * param succeeded 代表回调成功 */ Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { // TODO Auto-generated method stub cachesize pStats.cacheSize ; //缓存大小 datasize pStats.dataSize ; //数据大小 codesize pStats.codeSize ; //应用程序大小 totalsize cachesize datasize codesize ; Log.i(TAG, cachesize---cachesize datasize----datasize codeSize----codesize) ; } } //系统函数字符串转换 long -String (kb) private String formateFileSize(long size){ return Formatter.formatFileSize(MainActivity.this, size); } // 获得所有启动Activity的信息类似于Launch界面 public void queryAppInfo() { PackageManager pm this.getPackageManager(); // 获得PackageManager对象 Intent mainIntent new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 通过查询获得所有ResolveInfo对象. ListResolveInfo resolveInfos pm.queryIntentActivities(mainIntent, 0); // 调用系统排序 根据name排序 // 该排序很重要否则只能显示系统应用而不能列出第三方应用程序 Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(pm)); if (mlistAppInfo ! null) { mlistAppInfo.clear(); for (ResolveInfo reInfo : resolveInfos) { String activityName reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name String pkgName reInfo.activityInfo.packageName; // 获得应用程序的包名 String appLabel (String) reInfo.loadLabel(pm); // 获得应用程序的Label Drawable icon reInfo.loadIcon(pm); // 获得应用程序图标 // 为应用程序的启动Activity 准备Intent Intent launchIntent new Intent(); launchIntent.setComponent(new ComponentName(pkgName,activityName)); // 创建一个AppInfo对象并赋值 AppInfo appInfo new AppInfo(); appInfo.setAppLabel(appLabel); appInfo.setPkgName(pkgName); appInfo.setAppIcon(icon); appInfo.setIntent(launchIntent); mlistAppInfo.add(appInfo); // 添加至列表中 } } } } 获取应用程序信息大小就是这么来的整个过程相对而言还是挺简单的比较难理解的是AIDL文件的使用和回调函数的处理。 仔细研究后才有所理解。 关于PackageManager的使用的源代码已上传下载地址http://download.csdn.net/detail/qinjuning/3775856 PS 源码中的AIDL所在包名错误导致报错应为android.content.pm。请大家修改后运行 把 getDeclaredMethod() 改成 getMethod()
http://www.yutouwan.com/news/138753/

相关文章:

  • 网站自然排名上海 网站制作
  • 菏泽市建设职工培训中心网站韩国vs加纳分析比分
  • 公司建网站怎么弄3d云设计平台
  • 2003网站的建设wordpress上传不了
  • 做网站需要备案效果图参考网站
  • 山东网站制作策划注册公司需要怎么注册
  • 汕头个人网站建设长治网站制作报价
  • 辽宁做网站公司公司起名字大全免费取名
  • 网站建设策划书心得网站cms模板
  • 网站建设计划书实验总结哈尔滨做企业网站
  • 深圳营销网站建设报价网站开发 .net 开源
  • 重庆巫山网站设计公司上海人才市场官网
  • .net做网站cwordpress 移动到回收站发生错误
  • 查询数据的网站怎么做网站开发要学些什么
  • 汉语资源建设相关网站英文网站建设深圳
  • 地图 添加到网站莱芜金点子最新招工
  • 铁岭做网站公司哪家好平面设计相关的网站有哪些
  • 建设工程公司网站枣庄建设路小学网站
  • 网站首页是什么意思init wordpress
  • 做一个内容网站多少钱网站建设应该注意的设计要点
  • 做甲方去哪个网站应聘wordpress 分享 qq
  • 安徽省做网站4a广告公司什么意思
  • 1997年网站建设项目安康市滴滴公司电话
  • 网站关键字怎么修改网站的设计流程有哪些步骤
  • 六年级做的网站的软件下载曲靖 曲靖网站建设软件(app)开发
  • 色块网站设计旅游类网站开发任务书
  • 租号网站开发成本科技园
  • 郑州%公司 网站建设做网站公司怎么样
  • 江苏做网站的企业网站改版的费用
  • 清河做网站哪儿便宜google下载