概述:
最近在写一个应用,要用到Fragment,我对于这一块还是有一点陌生,因为之前一直用的是Activity。不过,这几天我也是各种上网查和问其他人完成了这个小程序。
程序的主要功能是在一个FragmentActivity中添加四个Fragment,再每个Fragment中去显示相应的手机信息。如:手机当前电量、手机内存占用率、获取手机上的已安装的应用程序名称等。
代码示例:
在FragmentActivity中加载第Fragment的方法是:
// 定义一个Fragment管理器 FragmentManager fragmentManager = getSupportFragmentManager(); // 得到在XML中定义的Fragment Fragment barreryFragment = fragmentManager.findFragmentById(R.id.fragment_barrery); // fragmentBarrery是否为空, // 若为空,那就重新加载一个,然后进行一个匹配, // 最后提交 if (null == barreryFragment) { barreryFragment = new BarreryFragment(); fragmentManager.beginTransaction() .add(R.id.fragment_barrery, barreryFragment) .commit(); }
基本上我们的FragmentActivity类只是去加载这4个Fragment,另外三个Fragment的加载在这里就不缀述了。
获取手机电量:
值得一提的是如何获得手机的电池电量值。Android其实没有直接提供给我们一个方法去调用就可以得到电池的电量,它需要去实现注册和接收广播才能够实现获得电池的电量。而其实是当手机的电量改变时,Android系统自身就会发出一个广播,我们需要实现一个接收广播的程序就可以获得电池电量的变化了。下面是这个接收广播的核心代码:
public void receiveBarreryBroadcast() { BroadcastReceiver receiveBarrery = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { // 获取当前电量 int current = intent.getExtras().getInt("level"); // 获得总电量 int total = intent.getExtras().getInt("scale"); // 计算当前电量的比率 double barreryDump = (current * 100.0) / total; // 修改第一个Fragment中的TextView文本信息 BarreryFragment.this.state.setText("剩余电量为:" + Math.round(barreryDump) + "%"); } } };
注册广播:
// 注册电池电量改变的广播 IntentFilter barreryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); BarreryFragment.this.getActivity().registerReceiver(receiveBarrery, barreryFilter);其实注册广播还可以在XML文件中去配置,这里就不再给出,需要的朋友可以去网上去查,都有的。
还有一个就是如何获得手机上已安装应用程序的名称呢?
这个倒很简单,只要几行代码就可以实现了。如下:
PackageManager packageManager = null; List<PackageInfo> packsList = null; int appCount = 0; // 得到本机上一共有多少个应用程序被安装 packageManager = getActivity().getPackageManager(); packsList = packageManager.getInstalledPackages(0); // 得到应用程序的数目 appCount = packsList.size(); // 循环添加将单个的AppInfo对象到AppInfo队列中 String[] appName = new String[appCount]; for (int i = 0; i < appCount; ++i) { PackageInfo packageInfo = packsList.get(i); // 得到应用程序名称,再赋值给appName appName[i] = packageInfo.applicationInfo.loadLabel(packageManager).toString(); }大家可以看到上面的代码中有这样的一句:
pckMan = getActivity().getPackageManager();这个地方我们用到了一个getActivity方法, 原因是因为getPackageManager这个方法不能在Fragment中去使用,只能用于Activity。而getActivity这个方法,就是得到这个Fragment所以在Activity(FragamentActivity)。
源代码分享:
本程序源码分享:点击打开链接
效果图(这里的电量为0%的原因可能是因为这是在虚拟机上测试的结果,放在真机上是可行的):