麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 系統(tǒng) > Android > 正文

android系統(tǒng)信息獲取

2019-11-09 18:04:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

String version_sdk = Build.VERSION.SDK_INT; // 設(shè)備SDK版本(Android版本號(hào))如:23(android 6.0)

String version_release = Build.VERSION.RELEASE; // 設(shè)備的系統(tǒng)版本
// 獲取設(shè)備號(hào)TelephonyManager var1 = (TelephonyManager)getapplicationContext().getSystemService(TELEPHONY_SERVICE);String deviceId = var1.getDeviceId();
在Android平臺(tái)中,通過(guò)TelephonyManager可以訪問(wèn)與手機(jī)通訊相關(guān)的信息,比如設(shè)備信息、網(wǎng)絡(luò)信息及SIM卡信息,同時(shí)還可以監(jiān)聽電話的相關(guān)狀態(tài)。下面我們通過(guò)幾個(gè)方面來(lái)說(shuō)明Android平臺(tái)中如何使用電話技術(shù)。1、獲取TelephonyManager對(duì)象
TelephonyManager類提供的主要的方法: Public Methodsint           getCallState()返回一個(gè)常數(shù),表示設(shè)備上的呼叫狀態(tài)CellLocation           getCellLocation()返回設(shè)備的當(dāng)前位置。int           getDataActivity()返回一個(gè)常數(shù),表示活動(dòng)的數(shù)據(jù)連接的類型。int           getDataState()返回一個(gè)常數(shù)表示當(dāng)前數(shù)據(jù)連接狀態(tài) String            getDeviceId()返回唯一的設(shè)備ID,例如,IMEI GSM和MEID CDMA手機(jī)。String           getDeviceSoftwareVersion()返回設(shè)備的軟件版本號(hào),例如,的IMEI / SV GSM手機(jī)。String           getLine1Number()返回1號(hào)線的電話號(hào)碼,例如,MSISDN用于GSM電話。List<NeighboringCellInfo>       getNeighboringCellInfo()返回設(shè)備的相鄰小區(qū)信息。String         getNetworkCountryIso()返回注冊(cè)的網(wǎng)絡(luò)運(yùn)營(yíng)商的國(guó)家代碼String           getNetworkOperator()返回的MCC +跨國(guó)公司的注冊(cè)網(wǎng)絡(luò)運(yùn)營(yíng)商String          getNetworkOperatorName()返回注冊(cè)的網(wǎng)絡(luò)運(yùn)營(yíng)商的名字int          getNetworkType()返回一個(gè)常數(shù),表示目前在設(shè)備上使用的無(wú)線電技術(shù)(網(wǎng)絡(luò)類型)。int          getPhoneType()返回設(shè)備的類型(手機(jī)制式)。String          getSimCountryIso() 返回SIM卡運(yùn)營(yíng)商的國(guó)家代碼String          getSimOperator()返回MCC +跨國(guó)公司(移動(dòng)國(guó)家代碼+移動(dòng)網(wǎng)絡(luò)代碼)的提供者的SIM卡。String          getSimOperatorName()返回服務(wù)提供者的名稱(SPN)。String          getSimSerialNumber()返回SIM卡的序列號(hào),如果適用的話。int          getSimState()返回一個(gè)常數(shù)表示SIM卡設(shè)備的狀態(tài)。String          getSubscriberId()返回唯一的用戶ID,例如,IMSI為GSM手機(jī)。String          getVoiceMailAlphaTag()檢索與語(yǔ)音信箱號(hào)碼相關(guān)的字母標(biāo)識(shí)符。String          getVoiceMailNumber()返回語(yǔ)音信箱號(hào)碼。boolean          hasIccCard()boolean          isNetworkRoaming()返回true,如果該設(shè)備被認(rèn)為是漫游當(dāng)前網(wǎng)絡(luò)上,支持GSM目的。void          listen(PhoneStateListener listener, int events)注冊(cè)一個(gè)偵聽器對(duì)象接收改變指定的電話狀態(tài)的通知。TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);2、通過(guò)TelephonyManager獲取設(shè)備信息String phoneTypeStr = "未知";int phoneType = telephonyManager.getPhoneType();switch (phoneType){	case TelephonyManager.PHONE_TYPE_CDMA:		phoneTypeStr="CDMA";		break;	case TelephonyManager.PHONE_TYPE_GSM:		phoneTypeStr="GSM";		break;	case TelephonyManager.PHONE_TYPE_Sip:		phoneTypeStr="SIP";		break;	case TelephonyManager.PHONE_TYPE_NONE:		phoneTypeStr="None";		break;}addTelephoneView("電話類型",phoneTypeStr);//GSM--IMEI  CDMA--MEIDString deviceId = telephonyManager.getDeviceId();addTelephoneView("設(shè)備編號(hào)",deviceId);//軟件版本編號(hào)String softVersion = telephonyManager.getDeviceSoftwareVersion();addTelephoneView("軟件版本",softVersion);//手機(jī)號(hào)碼(不一定能獲取到)String phoneNumber = telephonyManager.getLine1Number();addTelephoneView("手機(jī)號(hào)碼",phoneNumber);3、通過(guò)TelephonyManager獲取網(wǎng)絡(luò)信息            //網(wǎng)絡(luò)信息:連接到一個(gè)網(wǎng)絡(luò)時(shí)有效,如果是CDMA則不一定有效//國(guó)家ISO代碼String networkCountry = telephonyManager.getNetworkCountryIso();addTelephoneView("國(guó)家ISO代碼",networkCountry);//運(yùn)營(yíng)商信息String networkOperatorId = telephonyManager.getNetworkOperator();addTelephoneView("運(yùn)營(yíng)商編號(hào)",networkOperatorId);String networkOperatorName=telephonyManager.getNetworkOperatorName();addTelephoneView("運(yùn)營(yíng)商名稱",networkOperatorName);//網(wǎng)絡(luò)連接狀態(tài)int  networktype = telephonyManager.getNetworkType();addTelephoneView("網(wǎng)絡(luò)類型",networktype+"");4、通過(guò)TelephonyManager獲取SIM卡信息                //SIM卡的狀態(tài)int simState = telephonyManager.getSimState();switch (simState){	case TelephonyManager.SIM_STATE_READY:		//SIM卡的ISO國(guó)家代碼		String simISO = telephonyManager.getSimCountryIso();		addTelephoneView("SIM國(guó)家ISO",simISO);		//SIM卡的運(yùn)營(yíng)商代碼		String simOperator = telephonyManager.getSimOperator();		addTelephoneView("SIM運(yùn)營(yíng)商編號(hào)",simOperator);		//SIM的運(yùn)營(yíng)商名稱		String simOperatorName = telephonyManager.getSimOperatorName();		addTelephoneView("SIM運(yùn)營(yíng)商名稱",simOperatorName);		//SIM的序列號(hào)‘		String number = telephonyManager.getSimSerialNumber();		addTelephoneView("SIM序列號(hào)",number);		break;}  注意獲取信息的時(shí)候需要添加如下權(quán)限:<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
5、通過(guò)繼承PhoneStateListener,使用TelephonyManager注冊(cè)后進(jìn)行監(jiān)聽電話狀態(tài)。PhoneStateListener可以通過(guò)重寫方法onCallStateChanged、onDataConnectionStateChanged、onDataActivity等方法對(duì)來(lái)電狀態(tài)、數(shù)據(jù)連接狀態(tài)、數(shù)據(jù)傳輸狀態(tài)進(jìn)行監(jiān)聽。 通過(guò)TelephonyManager.listen方法進(jìn)行注冊(cè),該方法有兩個(gè)參數(shù),一個(gè)參數(shù)為PhoneStateListener,第二個(gè)參數(shù)為監(jiān)聽標(biāo)志,決定了監(jiān)聽哪些狀態(tài)。 PhoneStateListener的之類代碼如下://定義電話狀態(tài)監(jiān)聽器PRivate PhoneStateListener listener = new PhoneStateListener(){	@Override	public void onCallStateChanged(int state, String incomingNumber) {		super.onCallStateChanged(state, incomingNumber);		String msg = "未知";		switch (state){			case TelephonyManager.CALL_STATE_IDLE:				msg="電話空閑";				break;			case TelephonyManager.CALL_STATE_RINGING:				msg = incomingNumber+"來(lái)電話了,響鈴中……";				break;			case TelephonyManager.CALL_STATE_OFFHOOK:				msg = "電話中……";				break;		}		Toast.makeText(TelephonyActivity.this,msg,Toast.LENGTH_LONG).show();	}	@Override	public void onDataConnectionStateChanged(int state) {		super.onDataConnectionStateChanged(state);		String msg = "未知";		switch (state){			case TelephonyManager.DATA_CONNECTED:				msg="數(shù)據(jù)已連接";				break;			case TelephonyManager.DATA_CONNECTING:				msg = "數(shù)據(jù)正在連接中……";				break;			case TelephonyManager.DATA_DISCONNECTED:				msg = "數(shù)據(jù)已關(guān)閉!";				break;		}		show.setText(msg);	}	@Override	public void onDataActivity(int direction) {		super.onDataActivity(direction);		String msg = "未知";		switch (direction){			case TelephonyManager.DATA_ACTIVITY_IN:				msg = "下載";				break;			case TelephonyManager.DATA_ACTIVITY_OUT:				msg = "上傳";				break;			case TelephonyManager.DATA_ACTIVITY_INOUT:				msg = "下載/上傳";				break;			case TelephonyManager.DATA_ACTIVITY_NONE:				msg = "未知";				break;		}		show.setText(msg);	}};注冊(cè)代碼:telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE            |PhoneStateListener.LISTEN_DATA_CONNECTION_STATE            |PhoneStateListener.LISTEN_DATA_ACTIVITY);注銷代碼:telephonyManager.listen(listener,PhoneStateListener.LISTEN_NONE);6、通過(guò) BroadcastReceiver接收廣播監(jiān)聽電話的狀態(tài)。當(dāng)撥打電話時(shí)系統(tǒng)會(huì)發(fā)送 Intent.ACTION_NEW_OUTGOING_CALL廣播,當(dāng)電話狀態(tài)發(fā)生變化的時(shí)候,系統(tǒng)會(huì)發(fā)送 TelephonyManager.ACTION_PHONE_STATE_CHANGED廣播,我們通過(guò)接收這兩個(gè)廣播來(lái)監(jiān)聽電話的相關(guān)狀態(tài)BroadcastReceiver的關(guān)鍵代碼如下:if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){		//去電		String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);	}else if(intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)){		//來(lái)電		String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);		if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){			//有來(lái)電,響鈴中			//TelephonyManager.EXTRA_STATE_IDLE;			//TelephonyManager.EXTRA_STATE_OFFHOOK			String phoneNumber=					intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);			//比對(duì)電話號(hào)碼			if(null !=backNumber &&					null != phoneNumber &&					backNumber.endsWith(phoneNumber)){				//掛掉電話				//AIDL  Android接口定義語(yǔ)言				//IPC				ITelephony iTelephony = getITelephony(context);				try {					iTelephony.endCall();				} catch (RemoteException e) {					e.printStackTrace();				} finally {				}			}		}else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){			//		}else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){		}	}}在清單文件中注冊(cè):<receiver android:name=".receiver.PhoneStateChanagedReceiver">    <intent-filter>        <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>        <action android:name="android.intent.action.PHONE_STATE"/>    </intent-filter></receiver>注意此處需要如下權(quán)限:<uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>7、電話攔截,在 6的基礎(chǔ)上,完成電話攔截操作,這里需要使用到 ITelephony.aidl。首先在 Android Studio的對(duì)應(yīng)的 Module中創(chuàng)建 aidl目錄,和 java目錄同級(jí),在該目錄下創(chuàng)建 com.android.internal.telephony包和 android.telephony包,然后拷貝 ITelephony.aidl和 NeighboringCellInfo.aidl到對(duì)應(yīng)的包下,然后從新構(gòu)建。通過(guò)反射拿到 ITelephony對(duì)象并調(diào)用 endCall方法掛斷電話。關(guān)鍵代碼如下:private static ITelephony getITelephony(Context context){	ITelephony iTelephony = null;	TelephonyManager telephonyManager=(TelephonyManager)			context.getSystemService(Context.TELEPHONY_SERVICE);	Class<TelephonyManager> c = TelephonyManager.class;	Method getITelephoneyMethod = null;	try {		getITelephoneyMethod = c.getDeclaredMethod("getITelephony",(Class[])null);		getITelephoneyMethod.setaccessible(true);		iTelephony = (ITelephony)getITelephoneyMethod.invoke(telephonyManager,(Object[])null);	} catch (NoSuchMethodException e) {		e.printStackTrace();	} catch (InvocationTargetException e) {		e.printStackTrace();	} catch (IllegalAccessException e) {		e.printStackTrace();	}	return  iTelephony;}
作者: 杰瑞教育出處: http://www.cnblogs.com/jerehedu/版權(quán)聲明:本文版權(quán)歸 煙臺(tái)杰瑞教育科技有限公司 和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

==========================================================================================================================

在開發(fā)中 我們有時(shí)候會(huì)需要獲取當(dāng)前手機(jī)的系統(tǒng)版本來(lái)進(jìn)行判斷,或者需要獲取一些當(dāng)前手機(jī)的硬件信息。

android.os.Build類中。包括了這樣的一些信息。我們可以直接調(diào)用 而不需要添加任何的權(quán)限和方法。

android.os.Build.BOARD:獲取設(shè)備基板名稱

android.os.Build.BOOTLOADER:獲取設(shè)備引導(dǎo)程序版本號(hào)

android.os.Build.BRAND:獲取設(shè)備品牌

android.os.Build.CPU_ABI:獲取設(shè)備指令集名稱(CPU的類型)

android.os.Build.CPU_ABI2:獲取第二個(gè)指令集名稱

android.os.Build.DEVICE:獲取設(shè)備驅(qū)動(dòng)名稱

android.os.Build.DISPLAY:獲取設(shè)備顯示的版本包(在系統(tǒng)設(shè)置中顯示為版本號(hào))和ID一樣

android.os.Build.FINGERPRINT:設(shè)備的唯一標(biāo)識(shí)。由設(shè)備的多個(gè)信息拼接合成。

android.os.Build.HARDWARE:設(shè)備硬件名稱,一般和基板名稱一樣(BOARD)

android.os.Build.HOST:設(shè)備主機(jī)地址

android.os.Build.ID:設(shè)備版本號(hào)。

android.os.Build.MODEL :獲取手機(jī)的型號(hào) 設(shè)備名稱。

android.os.Build.MANUFACTURER:獲取設(shè)備制造商

android:os.Build.PRODUCT:整個(gè)產(chǎn)品的名稱

android:os.Build.RADIO:無(wú)線電固件版本號(hào),通常是不可用的 顯示unknown

android.os.Build.TAGS:設(shè)備標(biāo)簽。如release-keys 或測(cè)試的 test-keys 

android.os.Build.TIME:時(shí)間

android.os.Build.TYPE:設(shè)備版本類型  主要為"user" 或"eng".

android.os.Build.USER:設(shè)備用戶名 基本上都為android-build

android.os.Build.VERSION.RELEASE:獲取系統(tǒng)版本字符串。如4.1.2 或2.2 或2.3等

android.os.Build.VERSION.CODENAME:設(shè)備當(dāng)前的系統(tǒng)開發(fā)代號(hào),一般使用REL代替

android.os.Build.VERSION.INCREMENTAL:系統(tǒng)源代碼控制值,一個(gè)數(shù)字或者git hash值

android.os.Build.VERSION.SDK:系統(tǒng)的API級(jí)別 一般使用下面大的SDK_INT 來(lái)查看

android.os.Build.VERSION.SDK_INT:系統(tǒng)的API級(jí)別 數(shù)字表示

android.os.Build.VERSION_CODES類 中有所有的已公布的Android版本號(hào)。全部是Int常亮??捎糜谂cSDK_INT進(jìn)行比較來(lái)判斷當(dāng)前的系統(tǒng)版本

但是在6.0上面打電話需要?jiǎng)討B(tài)請(qǐng)求權(quán)限,所以代碼又改成這樣:
if (Build.VERSION.SDK_INT >= 23) {          //判斷有沒(méi)有撥打電話權(quán)限          if (PermissionChecker.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {              //請(qǐng)求撥打電話權(quán)限              ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CODE);          } else {              callPhone("號(hào)碼");          }      } else {          callPhone("號(hào)碼");      }  
Android 6.0 使用 Apache HttpClient
android {    useLibrary 'org.apache.http.legacy'}

有時(shí)即使我們使用的是Android 6,并且加入useLibrary配置,也有可能出現(xiàn)編譯錯(cuò)誤:

" Unable to find optional library: org.apache.http.legacy"

解決辦法:

     1、看看目錄E:/software/Android/sdk/platforms/android-23/optional 下有沒(méi)有org.apache.http.legacy.jar 和 optional.json


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久成人动漫 | 成人电影毛片 | 久久久久久久久久美女 | 91美女视频在线观看 | www.三区| 91成人一区| 国产精品爆操 | 欧美18—19sex性护士中国 | 亚洲精品无码不卡在线播放he | 国产视频在线一区 | 国产精品九九久久一区hh | 中文字幕在线观看亚洲 | 久久综合九色 | 高潮激情aaaaa免费看 | 看中国一级毛片 | wwwxxx国产 | 激情在线观看视频 | 亚洲性综合网 | 天天色图片 | 热re91久久精品国产99热 | 欧美精品色精品一区二区三区 | 国产毛片网站 | 成人午夜免费国产 | 欧美成人理论片乱 | 成人免费av在线 | 黄色片网站免费观看 | 国产午夜精品一区二区三区在线观看 | 精品国产91久久久久久久 | www.9191.com | 日本欧美一区二区三区视频麻豆 | 黄色免费电影网址 | 国产一级做a| 毛片电影网址 | 好吊一区二区三区 | 久久99久久98精品免观看软件 | 视频一区 在线 | 午夜生活理论片 | 久久羞羞视频 | 羞羞电影网 | 91 在线 | 毛片免费观看视频 |