同步操作将从 禁止发春/DeviceInfo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
采集Android设备信息,以Json形式输出
可自由定制要采集的设备类型,显示的设备信息详情等
BaseDeviceInfoCollector
类,配合DeviceInfoManager
以获取任意设备信息DeviceInfoManager
管理每个设备信息采集器(下简称:Collector),可自由添加Collector,以同时采集N多种软硬件设备信息DeviceInfoCollectListener
,可以监听采集结束等各种状态{
"board": {"boardName": "MSM8939"},
"sim": [{
"dataState": "0",
"imsi": "460036820263837",
"isNetworkRoaming": "false",
"networkOperatorName": "China Telecom",
"networkType": "14",
"phoneType": "2",
"simCountryIso": "cn",
"simOperator": "46003",
"simSerialNumber": "89860315844110607274",
"simState": "0"
}]
}
DeviceInfoManager.NewInstance(this)
.addCollector(new PhoneBasicInfoCollector(this, "basic")) //Andorid设备基本信息(PhoneBasicInfoCollector)
.addCollector(new SimInfoCollector(this, "sim")) //Sim卡信息(SimInfoCollector)同时识别多张Sim卡
.addCollector(new CpuInfoCollector(this, "cpu")) //Cpu信息(CpuInfoCollector)
.addCollector(new BoardInfoCollector(this, "board")) //主板信息(BoardInfoCollector)
.addCollector(new BatteryInfoCollector(this, "battery")) //电池信息(BatteryInfoCollector)
.addCollector(new StorageInfoCollector(this, "storage")) //存储信息(RAM & SD)(StorageInfoCollector)
.addCollector(new CameraInfoCollector(this, "camera", true)) //摄像头信息(CameraInfoCollector)
.addCollector(new ScreenInfoCollector(this, "screen")) //屏幕信息(ScreenInfoCollector)
.addCollector(new UiInfoCollector(this, "ui")) //Ui信息(UiInfoCollector)
.addCollector(new SensorInfoCollector(this, "sensor")) //传感器列表(SensorInfoCollector)
.addCollector(new NfcInfoCollector(this, "nfc")) //NFC信息(NfcInfoCollector)
.addCollector(new SystemInfoCollector(this, "system")) //系统相关信息(Build.prop等)
.autoStartManualCollection(true)
.bindListener(mDeviceInfoCollectListener)
.start();
public String getJsonInfo();
以自定义Json的输出内容库版本号 version 请看上方 JitPack 的最新版本号,如
v1.0.2
,并不是xxx(推荐使用最新版)
Step 1.Add it in your root build.gradle at the end of repositories
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2.Add the dependency
dependencies {
compile 'com.github.guyuepeng:DeviceInfo:xxx'
}
Step 1.Add it in your root build.gradle at the end of repositories
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Step 2.Add the dependency
<dependency>
<groupId>com.github.guyuepeng</groupId>
<artifactId>DeviceInfo</artifactId>
<version>xxx</version>
</dependency>
通过继承BaseDeviceInfoCollector
抽象类进行功能拓展,以采集更多信息,或输出自定义的Json内容
public DemoCollector(Context context, String collectorName)
中的collectorName
public abstract boolean needCollectManually();
返回自定义Collector是否需要手动收集public abstract String[] getRequiredPermissions();
返回自定义Collector所需要的权限(每个Collector独立管理权限,Manager统一申请)protected abstract void doCollectAutomatically();
Collector做自动采集的方法protected abstract void doCollectManually();
Collector做手动采集的方法,若采用Manager统一管理,需要needCollectManually()
的返回值为true
此方法才会被调用package ltns.deviceinfolib.collector;
import android.content.Context;
/**
* @date 创建时间:2018/1/8
* @author appzy
* @Description
* @version
*/
public class DemoCollector extends BaseDeviceInfoCollector {
public DemoCollector(Context context, String collectorName) {
super(context, collectorName);
}
@Override
public boolean needCollectManually() {
return false;
}
@Override
public String[] getRequiredPermissions() {
return new String[0];
}
@Override
protected void doCollectAutomatically() {
}
@Override
protected void doCollectManually() {
}
}
为了代码简洁易读,我把它设计成这样:(不知道这样写会不会违背什么设计模式,如果有请issues告诉我,谢谢:D)
DeviceInfoManager.NewInstance(this)
.addCollector(new BoardInfoCollector(MainActivity.this, "board"))
.addCollector(new SimInfoCollector(MainActivity.this, "sim"))
.autoStartManualCollection(true)
.bindListener(mDeviceInfoCollectListener)
.start();
addCollector(BaseDeviceInfoCollector)
添加一个新的Collector到Manager中autoStartManualCollection(boolean)
默认是true,自动采集全部完成后立即开启手动采集队列在DeviceInfoCollectListener中监听采集状态:
mDeviceInfoManager.getDeviceJsonInfo();
方法获取到Manager中所有Collector采集到的信息mCollector.getJsonInfo();
方法获取单个Collector中的信息void onStart();
Manager调用start()时回调void onSingleSuccess(BaseDeviceInfoCollector mCollector);
当有某个Collector成功采集到信息后回调void onSingleFailure(BaseDeviceInfoCollector mCollector, String mErrorInfo);
当有某个Collector采集信息失败后回调(并不一定没有采集到数据,已经采集到的信息仍会被以Json格式输出)void onAllDone(DeviceInfoManager mDeviceInfoManager);
通过addCollector(...)方法添加到Manager中的所有Collector均完成采集动作后回调,需要说明的是,不一定是全部采集成功了,只是采集动作完成了void onAutoAllDone(DeviceInfoManager mDeviceInfoManager);
当抛开需要手动收集的收集器,其他的收集器全部完成采集动作后回调注意:
onSingleFailure(BaseDeviceInfoCollector mCollector, String mErrorInfo)
中也可能存在数据,即mCollector.getJsonInfo();
也可能会有数据,具体原因可参考源码和下方 注意事项
private DeviceInfoCollectListener mDeviceInfoCollectListener = new DeviceInfoCollectListener() {
@Override
public void onStart() {
}
@Override
public void onSingleSuccess(BaseDeviceInfoCollector mCollector) {
//mCollector.getJsonInfo();
}
@Override
public void onSingleFailure(BaseDeviceInfoCollector mCollector, String mErrorInfo) {
//mCollector.getJsonInfo();
}
@Override
public void onAllDone(DeviceInfoManager mDeviceInfoManager) {
// mDeviceInfoManager.getDeviceJsonInfo();
}
@Override
public void onAutoAllDone(DeviceInfoManager mDeviceInfoManager) {
}
};
(支持但不推荐)
当然还是推荐使用Manager :D。就是想要自己单独跑也可以,接着~
特别说明:Collector单独跑需要调用者自行申请权限,因此方便起见,推荐使用Manager统一管理
以BoardInfoCollector
为例:
BoardInfoCollector mCollector = new BoardInfoCollector(MainActivity.this, "board");
mCollector.bindObserver(mStateObserver);
mCollector.startCollectAutomatically();//启动自动采集
mCollector.startCollectManually();//启动手动采集
在CollectorStateObserver
中监听Collector状态:
void onCollectionSuccess(BaseDeviceInfoCollector mCollector);
当手动采集和自动收集均成功完成采集时调用void onCollectionFailure(BaseDeviceInfoCollector mCollector,String mErrorInfo);
void onManualCollectionSuccess(BaseDeviceInfoCollector mCollector,boolean startNext);
当手动参与的信息收集成功时调用。 P.s. 此方法回调时会同时回调onCollectionSuccess(),具体看源码void onManualCollectionFailure(BaseDeviceInfoCollector mCollector,String mErrorInfo,boolean startNext);
当手动参与的信息收集失败时调用。 P.s. 此方法回调时会同时回调onCollectionFailure(...)void onNeedManualCollect(BaseDeviceInfoCollector mCollector);
该采集器需要手动采集时回调,具体回调时间请看源码 private CollectorStateObserver mStateObserver=new CollectorStateObserver() {
@Override
public void onCollectionSuccess(BaseDeviceInfoCollector mCollector) {
}
@Override
public void onCollectionFailure(BaseDeviceInfoCollector mCollector, String mErrorInfo) {
}
@Override
public void onManualCollectionSuccess(BaseDeviceInfoCollector mCollector, boolean startNext) {
}
@Override
public void onManualCollectionFailure(BaseDeviceInfoCollector mCollector, String mErrorInfo, boolean startNext) {
}
@Override
public void onNeedManualCollect(BaseDeviceInfoCollector mCollector) {
}
};
Handler
boolean isManualCollectionStartAutomatically
默认为true,若要更改需要手动配置autoStartManualCollection(boolean)
为false。若设置为false,需要调用startCollectByHand
开启手动采集队列;当然也可以单独开启某个Collector的手动采集onSingleFailure(BaseDeviceInfoCollector mCollector, String mErrorInfo)
回调中通过调用mCollector.getJsonInfo();
方法仍可以获取到doCollectAutomatically();
方法中采集到的自动收集部分的设备信息BaseDeviceInfoCollector
实现;若要使用库内Collector,需要在 Manifests.xml 中声明对应权限后才能正常使用此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。