CN105391832A - 一种用于检测智能手机硬件状态的硬件信息检测系统 - Google Patents
一种用于检测智能手机硬件状态的硬件信息检测系统 Download PDFInfo
- Publication number
- CN105391832A CN105391832A CN201510824470.4A CN201510824470A CN105391832A CN 105391832 A CN105391832 A CN 105391832A CN 201510824470 A CN201510824470 A CN 201510824470A CN 105391832 A CN105391832 A CN 105391832A
- Authority
- CN
- China
- Prior art keywords
- detecting unit
- unit
- instruction
- module
- detecting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Telephone Function (AREA)
Abstract
本发明公开了一种用于检测智能手机硬件状态的硬件信息检测系统,该系统包括电脑客户端和手机服务器端。由于本发明提供了一种用于检测智能手机硬件状态的硬件信息检测系统便于手机生产厂商来在手机出厂之前对手机进行硬件评测,以检查硬件是否合格,同时便于消费者对购买的手机进行信息检测,防止卖家的欺骗行为,满足了现有技术中对使用安卓系统的手机进行硬件信息检测的系统的需求。
Description
技术领域
本发明涉及电子技术领域,尤其涉及一种用于检测智能手机硬件状态的硬件信息检测系统。
背景技术
随着经济与科技的发展,社会已经迈入了信息化时代。电子技术的革新,更是带动了与之相关的软件技术的革新。许多行业的产品都朝着智能化、网络化的方向发展,例如智能手机以其方便使用,功能齐全等优点,成为人们生活必不可少的组成部分。
智能手机上的操作平台多种多样,其中以谷歌的安卓系统(英文:Android)平台、苹果的苹果系统(英文:IOS)和微软的WindowsPhone(微软手机系统)这三种操作系统最为流行,各占据一定的用户市场份额。
针对安卓系统而言,由于使用安卓系统的手机生产商众多,手机生产商和消费者他们都会遇到一个难以解决的问题。对于手机生产厂商来说,他们希望在手机出厂之前,能够对手机进行硬件评测,以检查硬件是否合格;对于消费者来说,他们也需要对自己购买的手机进行信息检测,以防止卖家的欺骗行为。
因此,目前亟需一种能够对使用安卓系统的手机进行硬件信息检测的系统。
发明内容
本发明实施例通过提供一种用于检测智能手机硬件状态的硬件信息检测系统,用以满足现有技术中对使用安卓系统的手机进行硬件信息检测的系统的需求。
本发明实施例提供了一种用于检测智能手机硬件状态的硬件信息检测系统,包括电脑客户端和手机服务器端;其中,
所述电脑客户端包括:第一控制模块,用于接收用户通过电脑的输入模块输入的第一检测指令;第一传输模块,用于将所述第一检测指令传输给所述手机服务器端;显示模块,用于通过所述第一传输模块接收所述手机服务器端发送的检测数据并进行显示;
所述手机服务器端包括:第二传输模块,用于接收所述第一检测指令;第二控制模块,用于根据所述第一检测指令,生成启动指令;检测模块,用于根据所述启动指令进行检测,并通过所述第二控制模块将检测结果发送给所述显示模块。
可选地,所述第一控制模块具体包括:
记录单元,用于通过数组中的元素记录所述第一检测指令;
赋值单元,用于将所述元素对应的位置赋值给记录变量,并将发送标记变量置为可发送状态。
可选地,所述第一传输模块包括:
第一发送单元,用于在所述发送标记变量为所述可发送状态时,创建套接字通道,并在所述套接字通道连通时将所述记录变量中的值写入所述电脑客户端的输出流;
第一接收单元,用于从所述电脑客户端的输入流中获取所述检测结果,并将所述检测结果传输给所述显示单元。
可选地,所述赋值单元还用于在所述第一接收单元将所述检测结果传输给所述显示单元之后,将所述发送标记变量置为不可发送状态。
可选地,所述第二传输模块包括:
监听单元,用于监听所述手机服务器端的端口;
读取单元,用于在所述监听单元监听到所述手机服务器端的端口接收到数据时,从所述手机服务器端的输入流中读取所述第一检测指令;
第一广播单元,用于广播所述第一检测指令。
可选地,所述第二控制模块包括:
第二广播单元,用于接收所述第一广播单元广播的所述第一检测指令;
启动单元,用于在所述第二广播单元接收到所述第一检测指令后,生成启动指令,所述启动指令用于启动所述手机服务器端中的检测模块进行检测。
可选地,所述第二控制模块还包括:
检测指令接收单元,用于用户通过手机的输入模块接收输入的第二检测指令,并将所述第二检测指令发送给所述启动单元。
可选地,所述检测模块至少包括以下中的至少一种:
显示屏检测单元、触摸屏检测单元、摄像头检测单元、听筒扬声器检测单元、主麦克风检测单元、耳麦检测单元、按键检测单元、振动马达检测单元、存储卡检测单元、通信卡检测单元、USB接口检测单元、电池接口检测单元、闪光灯检测单元、无线网络检测单元、蓝牙检测单元、GPS检测单元、重力传感器检测单元、距离传感器检测单元。
本发明实施例中的一个或多个技术方案,至少具有以下技术效果或优点:
1、由于本发明实施例提供了一种用于检测智能手机硬件状态的硬件信息检测系统,便于手机生产厂商来在手机出厂之前对手机进行硬件评测,以检查硬件是否合格,同时便于消费者对购买的手机进行信息检测,防止卖家的欺骗行为,满足了现有技术中对使用安卓系统的手机进行硬件信息检测的系统的需求。
2、由于各个组件之间通过广播进行通信,同时要传输的数据类型有很多种,对于每一种数据类型都定义对应的广播事件和广播接收者,使得广播发送者并不关心接收者是否接收到了广播事件,也不关心收到广播事件之后如何处理,所以使用广播传输数据保证了模块的独立性,同时使得数据的传输能够高效有序进行。
3、本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统能够检测的硬件信息种类丰富,涉及到了安卓手机硬件的方方面面,信息清晰详实,操作简便易用,同时本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统能够同时从被检测端和检测端同时发起测试,尤其是检测端能够直接控制被检测端运行,实时记录运行数据。
附图说明
图1为本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的系统架构图;
图2A是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的系统流程图;
图2B是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的数据流通示意图;
图3A是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的模块图;
图3B是本发明实施例提供的电脑客户端的主界面的示意图;
图3C是本发明实施例提供的电脑客户端的主界面的示意图;
图4是本发明实施例提供的第一控制模块的模块图;
图5是本发明实施例提供的第一传输模块的模块图;
图6是本发明实施例提供的第二传输模块的模块图;
图7是本发明实施例提供的第二控制模块的模块图;
图8是本发明实施例提供的检测模块的模块图。
具体实施方式
本发明实施例通过提供一种用于检测智能手机硬件状态的硬件信息检测系统,用以满足现有技术中对使用安卓系统的手机进行硬件信息检测的系统的需求。
请参考图1,图1是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的系统架构图,如图1所示,安装于电脑10上的电脑客户端接收用户输入的检测指令并向安装于智能手机20上的手机服务器端发出检测指令,手机服务器端根据检测指令执行相应的检测动作,并将检测结果返回到电脑客户端进行显示。
请继续参考图2A和图2B,图2A是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的系统流程图,图2B是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的数据流通示意图,如图2A和图2B所示,电脑客户端通过输出流向手机服务器发送检测指令,手机服务器端通过输入流接收检测指令并进行检测,手机服务器端通过输出流将检测结果返回到电脑客户端进行显示,电脑客户端通过输入流接收检测结果并进行显示。
请参考图3A,图3A是本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统的模块图,如图3A所示,该用于检测智能手机硬件状态的硬件信息检测系统包括电脑客户端模块301和手机服务器端302,其中,
电脑客户端301包括:第一控制模块3011,用于接收用户通过电脑的输入模块输入的第一检测指令;第一传输模块3012,用于将第一检测指令传输给手机服务器端302;显示模块3013,用于通过第一传输模块3012接收手机服务器端302发送的检测数据并进行显示;
手机服务器端302包括:第二传输模块3021,用于接收第一检测指令;第二控制模块3022,用于根据第一检测指令,生成启动指令;检测模块3023,用于根据启动指令进行检测,并通过第二控制模块3022将检测结果发送给显示模块3013。
在本实施例中,将以Java语言来介绍本实施例中用于检测智能手机硬件状态的硬件信息检测系统的实施过程,在其他实施例中,还可以使用其他编程语言如C、C++等等,在此就不再赘述了。
针对电脑客户端的程序设计,第一控制模块3011和显示模块3013可以由Client类来实现,第一传输模块3012可以由TransThread来实现。电脑客户端的主界面,可以通过如下过程来实现:
在Eclipse(一个基于Java的、开放源代码的可扩展开发平台)中新建一个JavaProject项目,命名为PCClient。在该项目中新建一个包,该包命名为com.hubu.client,然后,在该包中创建一个Client.java文件,让Client这个类继承JFrame框架,并在这个类中定义一个JTextArea、一个JPanel和一个拥有20个按钮的JButton数组,然后在Client()构造器中实现这个界面的初使化,请参考图3B,图3B是本发明实施例提供的电脑客户端的主界面的示意图。该界面初始化的步骤如下:
1、调用父类构造器为该界面定个标题,例如“用于检测智能手机硬件状态的硬件信息检测系统-电脑客户端”等等;
2、设置界面的大小、位置、图标等属性,并调用setResizable(false)方法使用户不能改变界面的大小,同时,调用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法,使用户在关闭界面的情况下,注销程序;
3、设置JPanel的布局形式为GridLayout布局,采用4行5列,然后使用for循环初使化JButton数组,同时将该数组的成员加载进JPanel对象中;
4、界面整体使用默认的BorderLayout布局,在该布局北面放置已定义的JTextArea,用来显示从手机服务器端传来的检测信息,在该布局的中央放置上述的JPanel对象;
5、通过setVisible(true)方法来使界面可见。
针对手机服务器端的程序设计,第二传输模块3021可以由TransServer类实现,第二控制模块3022可以由StartActivity类实现,检测模块3023可以由Battery(电池)、Bluetooth(蓝牙)、Camera(摄像头)、Display(显示屏)、Flashlight(闪光灯)、FM(收音机)、GPS(全球定位系统)、GravitySensor(重力传感器)、Headset(耳麦)、Keyboard(按键)、MIC(麦克风)、Motor(振动马达)、RangeSensor(距离传感器)、SDCard(存储器)、SIM(通信卡)、Speaker(听筒扬声器)、TouchScreen(触摸屏)、USB(USB接口)、Wifi(无线网络)这19个类实现。手机服务器端的主界面可以通过如下过程来实现:
在Eclipse中新建一个AndroidApplicationProject项目,命名为DeviceTest,并创建一个名为com.utils的包,在该包中新建一个MainActivity类,它继承Activity类,然后在该项目的res\layout目录下新建文件activity_main.xml和gridview.xml。具体设计过程如下:
1、在activity_main.xml文件中,将布局方式设置为LinearLayout,然后添加一个GridView组件;
2、在gridview.xml文件中,将布局方式设置为LinearLayout,然后添加一个ImageView组件、一个TextView组件,其中ImageView是用来放置图片的,TextView是用来放置相应文字的;请参考图3C,图3C是本发明实施例提供的手机服务器端的主界面的示意图;
3、在MainActivity文件中,重写onCreate()方法,在该方法中先取得一个LayoutInflater对象,然后加载activity_main.xml文件,并获取GridView组件:
inflaer=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
setContentView(R.layout.activity_main);
gridView=(GridView)this.findViewById(R.id.gridview);
4、为GridView组件设置一个适配器:
gridView.setAdapter(newMainAdapter());
这个适配器MainAdapter继承自BaseAdapter,在它的getView()方法中,需要为每一个网格加载一个相同的布局文件,并获取ImageView组件和TextView组件:
Viewview=inflaer.inflate(R.layout.gridview,null);
ImageViewiv=(ImageView)view.findViewById(R.id.imageview);
TextViewtv=(TextView)view.findViewById(R.id.title);
并且分别为这两个组件配制相应的内容。
在具体实施过程中,请参考图4,图4是本发明实施例提供的第一控制模块的模块图,如图4所示,第一控制模块3011具体包括:
记录单元30111,用于通过数组中的元素记录第一检测指令;
赋值单元30112,用于将元素对应的位置赋值给记录变量,并将发送标记变量置为可发送状态。
具体来讲,第一控制模块3011由上述的JButton数组来实现的,它的操作步骤如下:
1、在类Client中定义两个类变量:
publicstaticintmsgToSend;//用于记录用户点击的按钮位置;
publicstaticbooleanflag=false;//设置一个标记位,用于标记是否有数据要发送;
2、让类Client实现ActionListener这个接口,并重写actionPerformed(ActionEvente)方法,在该方法中,获取那个被点击的JButton组件:
Objectobject=e.getSource();
然后通过if语句来判断用户按下了哪个按键,并将该按键的位置赋给msgToSend变量,接着,将flag置为true,代表传输模块可以传输数据了;
3、在Client()构造器中,为每一个JButton对象绑定一个ActionListener类型的监听器。
在具体实施过程中,请参考图5,图5是本发明实施例提供的第一传输模块的模块图,如图5所示,第一传输模块3012包括:
第一发送单元30121,用于在发送标记变量为可发送状态时,创建套接字通道,并在套接字通道连通时将记录变量中的值写入电脑客户端301的输出流;
第一接收单元30122,用于从电脑客户端301的输入流中获取检测结果,并将检测结果传输给显示单元。
具体来讲,第一传输模块3012的功能有两个:向手机服务器端传送检测指令和接收从手机服务器端发送过来的检测结果。
为了创建电脑到手机的连接,需要一条通信桥梁USB。具体的操作流程如下:
1、在类Client中新建一个名为execAdb()的方法;
2、在execAdb()方法中首先需要进行端口转发:
Runtime.getRuntime().exec("adbforwardtcp:"+PC_PORT+"tcp:"+PHONE_PORT);
PC_PORT和PHONE_PORT是两个int型常量,PC_PORT代表电脑客户端的端口号,PHONE_PORT代表手机服务器的端口号。该函数的功能是将电脑上PC_PORT端口上的数据全部转发到端口PHONE_PORT上,而手机服务器端的服务器程序监听的正是PHONE_PORT端口。进行端口转发之后,手机服务器端的程序和电脑客户端的程序就能正常的进行Socket通信了。
3、开启传输数据的线程。它负责数据的交互,实现过程如下:
3.1、在com.hubu.client包中新建一个TransThread类,它继承Thread类;
3.2、重写类TransThread中的run()方法;
3.3、在run()方法中将数据交互模块封装在一个死循环中;
3.4、在该循环中,判断Client.flag的值,一旦它为真,就创建一个Socket通道,当Socket通道连通后,就从这个通道中获取outputStream,并将要检测的请求Client.msgToSend写入该流中,以便发送至手机服务器端,然后再从这个通道中取得inputStream,而这个inputStream则是从手机服务器返回的检测消息,将其读取出来,并通过JTextArea中的setText()方法将结果呈现在上述的显示界面上,最后,将Client.flag置为false,等待下一次请求即可:
4、将Client类作为程序的入口,初使化一个Client对象,然后调用execAdb()方法。
在具体实施过程中,赋值单元30112还用于在第一接收单元30122将检测结果传输给显示单元之后,将发送标记变量置为不可发送状态。
显示单元3013根据接收到的检测结果显示相应的数据即可,在此就不再赘述了。
在具体实施过程中,请参考图6,图6是本发明实施例提供的第二传输模块的模块图,如图6所示,第二传输模块3021包括:
监听单元30211,用于监听手机服务器端302的端口;
读取单元30212,用于在监听单元30211监听到手机服务器端302的端口接收到数据时,从手机服务器端302的输入流中读取第一检测指令;
第一广播单元30213,用于广播第一检测指令。
第二传输模块3021的功能有两个:接收电脑客户端传输过来的检测指令、向电脑客户端发送检测结果。为了能够持续不断的接收指令和发送检测结果,将传输数据的代码放在一个死循环中,传输数据的代码采用阻塞的方式,因此只有成功接收指令,并传送了检测结果之后才会执行下一次循环。具体的实现流程如下:
1、在IntentAction类中定义另外一组String型常量,它是用于传输数据的广播事件,包括DATA_FROM_CAMERA、DATA_FROM_DISPLAY、DATA_FROM_MIC、DATA_FROM_SPEAKER、DATA_FROM_TOUCH_SCREEN、DATA_FROM_GRAVITY_SENSOR、DATA_FROM_KEYBOARD、DATA_FROM_RANGE_SENSOR、DATA_FROM_FLASH_LIGHT、DATA_FROM_BLUETOOTH、DATA_FROM_SD_CARD、DATA_FROM_HEADSET、DATA_FROM_SIM、DATA_FROM_USB、DATA_FROM_MOTOR、DATA_FROM_BATTERY、DATA_FROM_FM、DATA_FROM_WIFI、DATA_FROM_GPS和DATA_TO_EXIT;
2、在该项目的src目录下新建一个com.trans包,在这个包中新建一个TransServer类,它继承Service类;
3、在MainActivity文件中定义一个Intent对象,然后在onCreate()方法中启动用于传输的Service,服务会一直在后台运行:
intentToSend=newIntent(MainActivity.this,TransServer.class);
startService(intentToSend);
4、在TransServer类中定义三个变量:
publicstaticStringmsgToSend;//用于记录从传输模块传来的检测信息
privateIntentFilterfilter;//用于为广播源添加可以接收的广播事件
privateBroadcastReceiverreceiver=newBroadcastReceiver(){}
这是一个匿名广播类,在它的onReceive(Contextcontext,Intentintent)方法中,接收从检测模块发来的广播事件,并提取Intent对象中的检测信息:
msgToSend=intent.getStringExtra("result");
5、在TransServer类的onCreate()方法中,实例化IntentFilter对象,并通过它的addAction()方法将上述用于传输数据的广播事件添加进去,然后注册这个广播:
registerReceiver(receiver,filter);
6、在com.trans包中新建一个TransThread类,它继承Thread类,它的作用是接收电脑客户端的检测指令和发送手机服务器端的检测信息。在run()方法中,首先,要用ServerSocket来监听手机服务器端的端口,然后,将数据交互模块封装在一个死循环中:一旦电脑客户端有数据发送至手机服务器端,就从客户端返回的Socket对象中读取inputStream对象,这个对象携带着电脑客户端的检测请求,实际上是一个int型的数值,它代表着用户点击电脑客户端按钮的位置,以相同的方式发送广播事件给StartActivity;与此同时,从客户端返回的Socket对象中获取outputStream对象,让程序休眠0.2s,等待检测模块的执行,然后,将从检测模块传回的检测结果TransServer.msgToSend写入outputStream对象中;
7、在TransServer类的onCreate()方法中开启上述线程;
8、在TransServer类的onDestroy()方法中,注销广播:
unregisterReceiver(receiver);
9、最后,在MainActivity的onDestroyed()方法中停止服务,保证主程序退出时,服务也被注销:
stopService(intentToSend)。
在具体实施过程中,请参考图7,图7是本发明实施例提供的第二控制模块的模块图,如图7所示,第二控制模块3022包括:
第二广播单元30221,用于接收第一广播单元30213广播的第一检测指令;
启动单元30222,用于在第二广播单元30221接收到第一检测指令后,生成启动指令,启动指令用于启动手机服务器端302中的检测模块3023进行检测。
请继续参考图7,第二控制模块3022还包括:
检测指令接收单元30223,用于用户通过手机的输入模块接收输入的第二检测指令,并将第二检测指令发送给启动单元30222。
具体来讲,手机服务器端的第二控制模块3022既能直接发出检测指令,又能根据电脑客户端发过来的检测指令启动对应的检测程序。
当手机收到检测指令后,就会发送一个广播事件给广播接收者,广播接收者根据收到的广播启动相应的检测程序。实现的具体步骤如下:
1、在com.utils包中新建一个IntentAction类,该类中定义了一组String型常量,它是用于启动Activity的广播事件,包括BATTERY、BLUETOOTH、CAMERA、DISPLAY、FLASH_LIGHT、FM、GPS、GRAVITY_SENSOR、HEADSET、KEYBOARD、MIC、MOTOR、RANGE_SENSOR、SDCARD、SIM、SPEAKER、TOUCH_SCREEN、USB、WIFI和EXIT;
2、在MainActivity类的onCreate()方法中为GridView组件绑定监听器:
gridView.setOnItemClickListener(newOnItemClickListener(){});
其中newOnItemClickListener(){}是匿名类的一个实例,在它的onItemClick()方法中,定义一个Intent对象,然后判断用户点击的图标的位置,并为该Intent对象设置一个相应的Action属性,再将该位置信息放入Intent中,最后将这个Intent对象以广播的形式发送出去;
3、在com.utils包中新建一个StartActivity类,它继承BroadcastReceiver类,在onReceive(Contextcontext,Intentintent)方法中,获取从广播事件中传来的Intent对象中的位置信息,并定义一个新的Intent对象:
intorder=intent.getIntExtra("order",-1);
IntentstartIntent=newIntent();
通过switch语句来判断order的值,并设置程序要跳转的类(即要检测的模块),当order等于19时,则向一个能接收“STOP_ACTIVITY”广播事件的广播源发送广播,它的作用是退出检测模块。当程序退出switch语句后,若order不等于19,则开启相应的检测模块,否则,就向传输模块发送一个广播,并在一个Intent对象中携带一个固定的信息,而这个信息就是要发送至电脑客户端的,代表用户点击了退出按钮;
4、在AndroidManifest.xml中注册这组广播事件:
当然了,电脑客户端端发过来的检测指令将由第二传输模块接收,传输模块也可以发送这些广播事件,并由StartActivity响应,在此就不再赘述了。
在具体实施过程中,请参考图8,图8是本发明实施例提供的检测模块的模块图,如图8所示,检测模块3023至少包括以下中的至少一种:
显示屏检测单元302301、触摸屏检测单元302302、摄像头检测单元302303、听筒扬声器检测单元302304、主麦克风检测单元302305、耳麦检测单元302306、按键检测单元302307、振动马达检测单元302308、存储卡检测单元302309、通信卡检测单元302310、USB接口检测单元302311、电池接口检测单元302312、闪光灯检测单元302313、无线网络检测单元302314、蓝牙检测单元302315、GPS检测单元302316、重力传感器检测单元302317、距离传感器检测单元302318。
显示屏检测单元302301的功能是控制手机显示屏分别输出黑屏、白屏、红屏、绿屏、蓝屏、灰度屏,并将检测结果以广播的形式发送至TransServer类。具体的操作如下:
1、在该项目的res\layout目录下新建文件display.xml,用来作为显示屏输出不同颜色的布局文件,在该布局文件中,添加一个线性布局管理器,并在这个管理器中添加一个ImageView组件,设置该组件的layout_width、layout_height属性均为填充父组件;
2、在Display类中定义一个类变量:
privatestaticintcount=0;//用来记录用户点击手机屏幕的次数;
3、在Display类的onCreate()方法中,设置该模块的界面为全屏,并加载步骤1中的布局文件:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.display);
4、从上述布局文件中获取ImageView对象,并为该组件绑定监听器,在该监听器的onClick()方法中,对count进行自增运算,即每点击屏幕一次,它的值加1,由于需要循环输出6种不同颜色,可以定义一个变量:intid=count%6,通过switch(id)语句来判断输出哪种颜色,即为ImageView组件设置哪种背景颜色;
5、最后,在onCreate()方法中为result赋值:
result="点击屏幕可以分别显示黑屏、白屏、红屏、绿屏、蓝屏、灰度屏"。
触摸屏检测单元302302的功能是控制触摸屏接收划线信号,并将检测结果以广播的形式发送至TransServer类。具体的操作如下:
1.在该项目的com.utils包中新建一个DrawView类,该类继承自android.view.View类。在该类中,首先定义程序中所需的属性:
privateintview_width=0;//屏幕的宽度
privateintview_height=0;//屏幕的高度
privatefloatpreX;//起始点的X坐标值
privatefloatpreY;//起始点的Y坐标值
privatePathpath;//路径
publicPaintpaint=null;//画笔
BitmapcacheBitmap=null;//定义一个内存中的图片,该图片将作为缓冲区
CanvascacheCanvas=null;//定义cacheBitmap上的Canvas对象
2.在DrawView类的构造器中,首先获取屏幕的宽度和高度,并创建一个与该View相同大小的缓存区,然后创建一个新的画面,并实例化一个路径,再将内存中的位图绘制到cacheCanvas中,最后实例化一个画笔,并设置画笔的相关属性:
paint.setColor(Color.RED);//设置画笔的颜色
paint.setStyle(Paint.Style.STROKE);//设置填充方式为描边
paint.setStrokeJoin(Paint.Join.ROUND);//设置笔刷的图形样式
paint.setStrokeCap(Paint.Cap.ROUND);//设置画笔转弯处的连接风格
paint.setStrokeWidth(1);//设置笔触的宽度为1像素
paint.setAntiAlias(true);//使用抗锯齿功能
paint.setDither(true);//使用抖动效果
3.在DrawView类的onDraw()方法中,设置画布的背景颜色,并采用默认设置创建一个画笔,然后绘制cacheBitmap、绘制路径以及保存当前绘图状态到栈中,并调用restore()方法恢复所保存的状态;
4.在DrawView类中,重写onTouchEvent()方法,为该视图添加触摸事件监听器,在该方法中,首先获取触摸事件发生的位置,然后应用switch语句对事件的不同状态添加响应代码:
4.1当手指刚触摸屏幕时,将绘图的起始点移到(x,y)坐标点的位置:
path.moveTo(x,y);
preX=x;
preY=y;
4.2当手指在屏幕上移动时,若移动到的位置在允许的范围内,则绘制一条线段轨迹,然后更新起始点坐标:
floatdx=Math.abs(x-preX);
floatdy=Math.abs(y-preY);
if(dx>=5||dy>=5){
path.quadTo(preX,preY,(x+preX)/2,(y+preY)/2);
preX=x;
preY=y;}
4.3当手指离开屏幕时,绘制路径:
cacheCanvas.drawPath(path,paint);
path.reset();
最后调用invalidate()方法更新视图;
5.在该项目的res\layout目录下新建文件touch_screen.xml,用来作为触摸屏接收划线信号的布局文件,在该布局文件中,添加一个帧布局管理器,并在帧布局管理器中添加上述步骤中创建的自定义视图:
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"......>
<com.utils.DrawView....../>
</FrameLayout>;
6.最后,在TouchScreen类的onCreate()方法中加载步骤5的布局文件,并为result赋值:
setContentView(R.layout.touch_screen);
result="您可以在屏幕上随意画画"。
摄像头检测单元302303的功能是控制主、副摄像头分别完成启动、拍照、存储和关闭操作,并将检测结果以广播的形式发送至TransServer类。一般的,手机上面都有两个摄像头,本模块设计的思路是:当启动摄像头检测时,系统会弹出一个对话框,提示用户点击所要检测的摄像头。具体的操作如下:
1.在该项目的res\layout目录下新建文件camera.xml,在该布局文件中,添加一个相对布局管理器,设置组件居中显示,在该布局管理器中,添加一个TextView组件和一个线性布局管理器,其中TextView组件用来显示固定信息——“请选择你要测试的摄像头”,然后,在该线性布局管理器中,添加两个Button组件,这两个组件水平放置,其中一个Button组件用于开启前置摄像头,另一个Button组件用于开启后置摄像头;
2.在Androidmanifest.xml文件中配制如下语句:
<activityandroid:name="com.dialog.Camera"android:label="系统提示:"
android:theme="android:style/Theme.Dialog">
</activity>
3.在Camera类的onCreate()方法中,加载步骤1的布局文件,获取布局文件中的两个Button组件,并分别为这两个组件绑定监听器,在它们各自的监听器的onClick()方法中,启动另外两个Activity子类。最后,为result对象赋值:
result="请自行开启前置或后置摄像头";
4.在该项目的com.activity包中新建两个Activity子类,它们分别是CameraPreposition类和CameraPostposition类,其中CameraPreposition类是用于操作前置摄像头的,CameraPostposition类是用于操作后置摄像头的,这两个类就是步骤3中要启动的两个Activity子类。由于系统对前后摄像头的封装几乎是一样的,只是在CameraInfo类中定义了两个整型变量:CAMERA_FACING_FRONT和CMAERA_FACING_BACK,以区分前后两个摄像头。下面以后置摄像头为例进行说明;
5.在该项目的res\layout目录下新建文件camera_postposition.xml,用来作为后置摄像头的布局文件,在该布局文件中,添加一个相对布局管理器,在该布局管理器中,添加一个SurfaceView组件和一个Button组件,其中SurfaceView组件用于显示拍摄画面,Button组件用于控制拍摄动作,前置摄像头的布局文件同上;
6.访问系统的摄像头需要使用<uses-feature/>声明来确保手机支持摄像头设备:
<uses-featureandroid:name="android.hardware.camera"/>
<uses-featureandroid:name="android.hardware.camera.autofocus"/>
7.为了使用摄像头和SD卡的功能,需要在Androidmanifest.xml文件中配制如下权限:
<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
8.在CameraPostposition类的onCreate()方法中,加载步骤5中的布局文件,获取布局文件中的SurfaceView组件和Button组件:
surfaceView=(SurfaceView)findViewById(R.id.surfaceview2);
takePictureButton=(Button)findViewById(R.id.button2);
9.获取一个SurfaceHolder对象:
SurfaceHoldersurfaceHolder=surfaceView.getHolder();
SurfaceHolder对象的作用是对SurfaceView对象进行控制,getHolder()方法返回的就是当前的SurfaceView对应的SurfaceHolder对象,用于对SurfaceView对象进行控制。当拍摄画面更新时,会执行回调方法,这样就能实时地控制SurfaceView上面显示的画面都是摄像头拍摄到的画面;
10.为SurfaceHolder对象添加一个回调接口:
surfaceHolder.addCallback(newSurfaceHolderCallback());
其中SurfaceHolderCallback是实现了SurfaceHolder.Callback接口的内部类,实现接口中的三个回调方法来感知到SurfaceView对象的创建、改变和消失;
11.创建一个Camera.PictureCallback对象(以内部类的形式),该对象的作用是描述拍摄的照片的各种属性和参数,包括存储路径、命名方式、保存格式等(当路径中不存在指定的文件夹时,会自动创建一个用于保存相片的文件夹);
12.为takePictureButton组件添加事件监听器,在该监听器的onClick()方法中,开启摄像头拍摄相片:
camera.takePicture(null,null,pictureCallback);
其中第三个参数就是前面定义的Camera.PictureCallback对象。
上述部分已经详细介绍了显示屏检测单元302301、触摸屏检测单元302302、摄像头检测单元302303的具体实现过程,通过本实施例的介绍,本领域所属的技术人员能够了解听筒扬声器检测单元302304、主麦克风检测单元302305、耳麦检测单元302306、按键检测单元302307、振动马达检测单元302308、存储卡检测单元302309、通信卡检测单元302310、USB接口检测单元302311、电池接口检测单元302312、闪光灯检测单元302313、无线网络检测单元302314、蓝牙检测单元302315、GPS检测单元302316、重力传感器检测单元302317、距离传感器检测单元302318对应的实现过程,以满足实际情况的需要,在此就不再赘述了。
可以看出,本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统能够检测的硬件信息种类丰富,涉及到了安卓手机硬件的方方面面,信息清晰详实,操作简便易用,同时本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统能够同时从被检测端和检测端同时发起测试,尤其是检测端能够直接控制被检测端运行,实时记录运行数据。
本发明实施例中的一个或多个技术方案,至少具有以下技术效果或优点:
1、由于本发明实施例提供了一种用于检测智能手机硬件状态的硬件信息检测系统,便于手机生产厂商来在手机出厂之前对手机进行硬件评测,以检查硬件是否合格,同时便于消费者对购买的手机进行信息检测,防止卖家的欺骗行为,满足了现有技术中对使用安卓系统的手机进行硬件信息检测的系统的需求。
2、由于各个组件之间通过广播进行通信,同时要传输的数据类型有很多种,对于每一种数据类型都定义对应的广播事件和广播接收者,使得广播发送者并不关心接收者是否接收到了广播事件,也不关心收到广播事件之后如何处理,所以使用广播传输数据保证了模块的独立性,同时使得数据的传输能够高效有序进行。
3、本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统能够检测的硬件信息种类丰富,涉及到了安卓手机硬件的方方面面,信息清晰详实,操作简便易用,同时本发明实施例提供的用于检测智能手机硬件状态的硬件信息检测系统能够同时从被检测端和检测端同时发起测试,尤其是检测端能够直接控制被检测端运行,实时记录运行数据。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种用于检测智能手机硬件状态的硬件信息检测系统,其特征在于,包括电脑客户端和手机服务器端;其中,
所述电脑客户端包括:第一控制模块,用于接收用户通过电脑的输入模块输入的第一检测指令;第一传输模块,用于将所述第一检测指令传输给所述手机服务器端;显示模块,用于通过所述第一传输模块接收所述手机服务器端发送的检测数据并进行显示;
所述手机服务器端包括:第二传输模块,用于接收所述第一检测指令;第二控制模块,用于根据所述第一检测指令,生成启动指令;检测模块,用于根据所述启动指令进行检测,并通过所述第二控制模块将检测结果发送给所述显示模块。
2.如权利要求1所述的系统,其特征在于,所述第一控制模块具体包括:
记录单元,用于通过数组中的元素记录所述第一检测指令;
赋值单元,用于将所述元素对应的位置赋值给记录变量,并将发送标记变量置为可发送状态。
3.如权利要求2所述的系统,其特征在于,所述第一传输模块包括:
第一发送单元,用于在所述发送标记变量为所述可发送状态时,创建套接字通道,并在所述套接字通道连通时将所述记录变量中的值写入所述电脑客户端的输出流;
第一接收单元,用于从所述电脑客户端的输入流中获取所述检测结果,并将所述检测结果传输给所述显示单元。
4.如权利要求3所述的系统,其特征在于,所述赋值单元还用于在所述第一接收单元将所述检测结果传输给所述显示单元之后,将所述发送标记变量置为不可发送状态。
5.如权利要求1所述的系统,其特征在于,所述第二传输模块包括:
监听单元,用于监听所述手机服务器端的端口;
读取单元,用于在所述监听单元监听到所述手机服务器端的端口接收到数据时,从所述手机服务器端的输入流中读取所述第一检测指令;
第一广播单元,用于广播所述第一检测指令。
6.如权利要求5所述的系统,其特征在于,所述第二控制模块包括:
第二广播单元,用于接收所述第一广播单元广播的所述第一检测指令;
启动单元,用于在所述第二广播单元接收到所述第一检测指令后,生成启动指令,所述启动指令用于启动所述手机服务器端中的检测模块进行检测。
7.如权利要求6所述的系统,其特征在于,所述第二控制模块还包括:
检测指令接收单元,用于用户通过手机的输入模块接收输入的第二检测指令,并将所述第二检测指令发送给所述启动单元。
8.如权利要求6所述的系统,其特征在于,所述检测模块至少包括以下中的至少一种:
显示屏检测单元、触摸屏检测单元、摄像头检测单元、听筒扬声器检测单元、主麦克风检测单元、耳麦检测单元、按键检测单元、振动马达检测单元、存储卡检测单元、通信卡检测单元、USB接口检测单元、电池接口检测单元、闪光灯检测单元、无线网络检测单元、蓝牙检测单元、GPS检测单元、重力传感器检测单元、距离传感器检测单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510824470.4A CN105391832A (zh) | 2015-11-24 | 2015-11-24 | 一种用于检测智能手机硬件状态的硬件信息检测系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510824470.4A CN105391832A (zh) | 2015-11-24 | 2015-11-24 | 一种用于检测智能手机硬件状态的硬件信息检测系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105391832A true CN105391832A (zh) | 2016-03-09 |
Family
ID=55423661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510824470.4A Pending CN105391832A (zh) | 2015-11-24 | 2015-11-24 | 一种用于检测智能手机硬件状态的硬件信息检测系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105391832A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106932004A (zh) * | 2017-03-27 | 2017-07-07 | 上海与德科技有限公司 | 一种传感器的检测方法及装置 |
CN107181690A (zh) * | 2016-12-21 | 2017-09-19 | 湖北大学 | 一种普适的博弈均衡的组播拓扑机制及方法 |
CN107295142A (zh) * | 2017-07-25 | 2017-10-24 | 北京小米移动软件有限公司 | 终端处理方法、装置及服务器 |
CN110379149A (zh) * | 2019-08-15 | 2019-10-25 | 珠海格力智能装备有限公司 | 设备检测方法及装置 |
CN111506819A (zh) * | 2020-04-24 | 2020-08-07 | 成都安易迅科技有限公司 | 一种硬件设备推荐方法、装置,服务器及存储介质 |
CN114356678A (zh) * | 2022-03-17 | 2022-04-15 | 北京奇立软件技术有限公司 | 获取设备硬件信息的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102438029A (zh) * | 2010-09-29 | 2012-05-02 | 卓望数码技术(深圳)有限公司 | 一种实现Android手机远程交互的控制方法及系统 |
CN102917095A (zh) * | 2012-10-10 | 2013-02-06 | 青岛海信移动通信技术股份有限公司 | 一种基于Android系统的终端测试的方法及装置 |
CN103577554A (zh) * | 2013-10-19 | 2014-02-12 | 广东欧珀移动通信有限公司 | 触发Android设备多媒体数据库扫描的方法及装置 |
-
2015
- 2015-11-24 CN CN201510824470.4A patent/CN105391832A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102438029A (zh) * | 2010-09-29 | 2012-05-02 | 卓望数码技术(深圳)有限公司 | 一种实现Android手机远程交互的控制方法及系统 |
CN102917095A (zh) * | 2012-10-10 | 2013-02-06 | 青岛海信移动通信技术股份有限公司 | 一种基于Android系统的终端测试的方法及装置 |
CN103577554A (zh) * | 2013-10-19 | 2014-02-12 | 广东欧珀移动通信有限公司 | 触发Android设备多媒体数据库扫描的方法及装置 |
Non-Patent Citations (1)
Title |
---|
佚名: "360手机卫士检查手机配置参数", 《百度文库》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107181690A (zh) * | 2016-12-21 | 2017-09-19 | 湖北大学 | 一种普适的博弈均衡的组播拓扑机制及方法 |
CN106932004A (zh) * | 2017-03-27 | 2017-07-07 | 上海与德科技有限公司 | 一种传感器的检测方法及装置 |
CN106932004B (zh) * | 2017-03-27 | 2019-09-13 | 上海与德科技有限公司 | 一种传感器的检测方法及装置 |
CN107295142A (zh) * | 2017-07-25 | 2017-10-24 | 北京小米移动软件有限公司 | 终端处理方法、装置及服务器 |
CN110379149A (zh) * | 2019-08-15 | 2019-10-25 | 珠海格力智能装备有限公司 | 设备检测方法及装置 |
CN111506819A (zh) * | 2020-04-24 | 2020-08-07 | 成都安易迅科技有限公司 | 一种硬件设备推荐方法、装置,服务器及存储介质 |
CN114356678A (zh) * | 2022-03-17 | 2022-04-15 | 北京奇立软件技术有限公司 | 获取设备硬件信息的方法及系统 |
CN114356678B (zh) * | 2022-03-17 | 2022-06-14 | 北京奇立软件技术有限公司 | 获取设备硬件信息的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105391832A (zh) | 一种用于检测智能手机硬件状态的硬件信息检测系统 | |
CN108845856B (zh) | 基于对象的同步更新方法、装置、存储介质及设备 | |
EP3287866A1 (en) | Electronic device and method of providing image acquired by image sensor to application | |
CN108008955B (zh) | 显示自定义控件信息的方法、装置 | |
CN205318371U (zh) | 一种面向安卓系统的硬件检测设备 | |
CN108182060A (zh) | 一种混合应用的埋点方法、移动终端及系统 | |
EP3866014A1 (en) | Data processing method, data processing device, terminal and smart device | |
WO2019057089A1 (zh) | 网卡镜像抓包方法、终端以及可读存储介质 | |
CN106031157A (zh) | 用于处理图像的电子设备和方法 | |
US11934814B2 (en) | Application porting method and apparatus, device, and medium | |
CN104169913A (zh) | 一种图片展示方法及装置、终端设备 | |
CN112420217A (zh) | 消息推送方法、装置、设备及存储介质 | |
KR20180010493A (ko) | 전자 장치 및 전자 장치의 비디오 편집 방법 | |
CN112116690A (zh) | 视频特效生成方法、装置及终端 | |
CN110888683A (zh) | 操作系统的性能优化方法、装置及可读介质 | |
CN111737100A (zh) | 数据获取方法、装置、设备及存储介质 | |
CN113377664A (zh) | 模型测试方法及装置、电子设备和存储介质 | |
CN110865864B (zh) | 快应用的界面显示方法、装置、设备及存储介质 | |
CN110851370A (zh) | 程序测试方法及装置、存储介质 | |
WO2018182282A1 (ko) | 전자 장치 및 그의 이미지 처리 방법 | |
CN106648598B (zh) | 用于显示应用的显示信息的方法和装置 | |
CN113467663B (zh) | 界面配置方法、装置、计算机设备及介质 | |
CN114913058A (zh) | 显示对象的确定方法、装置、电子设备及存储介质 | |
WO2020064000A1 (zh) | 一种消息框的显示方法及装置、终端、存储介质 | |
CN112905328A (zh) | 任务处理方法、装置及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160309 |