美文网首页
查看和获取手机信息

查看和获取手机信息

作者: liuye099 | 来源:发表于2019-11-11 17:38 被阅读0次

一. 查看或设置系统属性

  1. SystemProperties
    我们可以通过SystemProperties.set()和 SystemProperties.get()这两个接口来对系统属性进行读取和设置。系统属性是对整个系统全局共享的,属性系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。这些属性是以键值对存在的,都是字符串类型。
  2. ADB命令
    可以通过ADB shell进行查看,具体方法是adb shell getprop +“具体的属性对应的名称”就可以读取你想要的属性了。如果不知道具体的属性是什么名称也可以先输入adb shell getprop命令回车,就会显示出所有手机所支持的属性名称及对应的值。
  3. 反射Method类的invoke()

try {
Method method = Class.forName("android.os.SystemProperties).getMethod("get",String.class);
String model = (String)method.invoke(null,"ro.product.vendor.name");
} catch(NoSuchMethodException e){
e.printStackTrace();
}

  1. android系统提供了TrafficStats可以获取流量
    网上列出的工具类代码:

//接受总量
TrafficStats.getUidRxBytes(uid);

//发送总量
TrafficStats.getUidTxBytes(uid);

//接受总的手机流量  下载
TrafficStats.getMobileRxBytes();

//发送总的手机流量  上传
TrafficStats.getMobileTxBytes();//获取手机3g/2g网络上传的总流

// 手机下载wifi
TrafficStats.getTotalRxBytes() - getMobileRexTotalBytes();

// 手机上传wifi
TrafficStats.getTotalTxBytes() - getMobileTrxTotalBytes();
  1. 获取当前前台应用的方法
    Android5.0以前,使用ActivityManager的getRunningTasks()方法,可以得到应用包名和Activity;Android5.0以后,可以通过UsageStatsManager.queryUsageStats方法替代,但是也只能得到应用包名。当然你也可以通过AccessibilityService,也可以得到应用包名和Activity。
    相关知识参见:(Android 9.0)应用使用数据统计服务——UsageStatsManager

6.获取使用时长和点击次数
Android5.0之前,通过PkgUsageStats这个类可以统计到应用的使用情况,但这些类在SDK不公开。
解决方案:将sdk/platforms/android-19/data/layoutlib.jar使用User Library的方式(AndroidStudio可以使用Provided添加依赖),就可以使用这些类

//  获取使用时长
public static long getUseDuration(String pkgName) {

    // 注意适配性问题,无法找到该类
    try{
        com.android.internal.app.IUsageStats mUsageStatsService = com.android.internal.app.IUsageStats.Stub
                .asInterface(ServiceManager.getService("usagestats"));
        PkgUsageStats[] stats;
        try {
            stats = mUsageStatsService.getAllPkgUsageStats();
        } catch (Exception e) {
            LogUtil.d("no permission get use duration");
            e.printStackTrace();
            return 0;
        }
        if (stats == null) {
            return 0;
        }

        for (PkgUsageStats ps : stats) {
            if (ps.packageName.equals(pkgName)) {
                return ps.usageTime;
            }
        }
    }catch(Exception e){

    }
    return 0;
}




// 获取使用次数
public static long getUseTime(String pkgName) {
    // 注意适配性问题,无法找到该类
    try{
        com.android.internal.app.IUsageStats mUsageStatsService = com.android.internal.app.IUsageStats.Stub
                .asInterface(ServiceManager.getService("usagestats"));
        PkgUsageStats[] stats = null;
        try {
            stats = mUsageStatsService.getAllPkgUsageStats();
        } catch (Exception e) {
            LogUtil.d("no permission get use duration");
            e.printStackTrace();
            return 0;
        }
        if (stats == null) {
            return 0;
        }
        for (PkgUsageStats ps : stats) {
            if (ps.packageName.equals(pkgName)) {
                return ps.launchCount;
            }
        }
    }catch(Exception e){

    }
    return 0;
}

注意使用这种方法需要:

    在应用程序的AndroidManifest.xml中的manifest节点中加入”android:sharedUserId=”android.uid.system”这个属性。
    使用目标系统的platform密钥来重新给apk文件重新签名。

二. 特殊属性介绍
build.prop是所有安卓手机都有的一些配置信息。位置在system/build.prop
我们了解了这些配置的意义后,可以通过root后对这个配置文件做一定的修改,达到不同的自定义效果,如:更改dpi、更改版本号、更改网络首选项等等。
  如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
  如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。
  如果属性名称以“net.”开头,都是与网络相关的信息,比如dns、主机名、为各功能预留的缓冲区大小,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。(这是很巧妙的。 netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)
dhcp.wlan 是网关、IP地址等无线网络相关信息;
  属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中。客户端应用程序可以轮询那个属性值,以确定结果、
external_sd_path 是外部存储SD卡的路径

本文参考资料:

  1. https://blog.csdn.net/gyw520gyw/article/details/52692810 Android 获取应用的点击次数和使用时长
  2. https://www.jianshu.com/p/3b6bcf9cec67 (Android 9.0)应用使用数据统计服务——UsageStatsManager

相关文章

  • 查看和获取手机信息

    一. 查看或设置系统属性 SystemProperties我们可以通过SystemProperties.set()...

  • adb命令

    查看手机或者模拟器的像素密度 查看手机或者模拟器的分辨率 查看手机或者模拟器的显示系统信息 获取序列号 获取 MA...

  • Docker操作命令及参数

    查看当前版本 查看docker环境信息 查看镜像和容器的详细信息 获取Docker镜像 Docker Regist...

  • windows渗透命令

    1. 获取操作系统信息 2.获取ARP缓存信息: 3. 查看服务进程id 4.查看服务、进程和启动程序信息: 这三...

  • Android中Http加载如何得到Cookie和 WebVie

    最近做项目在手机端登录Http请求和 WebView 记载登录获取Cookie信息,可查看Cookie信息。 如图...

  • 获取手机和app信息

  • iOS获取系统信息

    iOS获取系统信息 获取版本号 获取手机序列号 获取手机型号 获取手机设备名称 获取手机别名 获取应用信息 当前应...

  • 获取手机信息

    APP在开发的过程中,有时候为了bug的跟踪,需要收集用户使用手机的设备,手机系统版本,手机型号,以及应用版本,应...

  • 获取手机信息

    /* 获取手机信息 应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来 *...

  • 【开发技巧】软件信息获取和手机信息

    史上最全的iOS各种设备信息获取总结 软件信息 1,获取软件版本号 手机信息 1.手机系统版本 2,获取UUID ...

网友评论

      本文标题:查看和获取手机信息

      本文链接:https://www.haomeiwen.com/subject/wygtictx.html