當前位置:首頁 » 安卓系統 » androidtelephony

androidtelephony

發布時間: 2024-10-11 15:32:17

A. com.android.providers.telephony是什麼程序、

是android開發中的一個工具包,提供一些必要的服務,例如:
Android系統採用SQLite資料庫方式存儲所有接收到的簡訊,簡訊的SQLite資料庫文件位於:
/data/data/com.android.providers.telephony/databases/mmssms.db

備份Android簡訊資料庫到SD卡上,可以使用adb工具連接手機,然後使用如下命令
busybox cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard

如果busybox cp命令不行,還可以使用cat命令:
cat /data/data/com.android.providers.telephony/databases/mmssms.db > /sdcard/mmssms.db

B. android怎麼實現自動接聽和掛斷電話功能

android 實現來電自動接聽和自動掛斷的方法:
第一步:准備應用環境需要的系統包和aidl文件。
(1)在應用中創建包:android.telephony
將android系統框架下的\framework\telephony\java\android\telephony目錄中的NeighboringCellInfo.aidl文件復制到上面創建的包(android.telephony )中;
(2)在應用中創建包:com.android.internal.telephony
將android系統框架下的\framework\telephony\java\com\android\internal\telephony目錄中的ITelephony.aidl文件復制到上面創建的包(com.android.internal.telephony )中。
第二步:創建一個獲取ITelephony的方法
PhoneUtils.java
package com.zhouzijing.android.demo;

import java.lang.reflect.Method;
import com.android.internal.telephony.ITelephony;
import android.telephony.TelephonyManager;

public class PhoneUtils {
/**
* 根據傳入的TelephonyManager來取得系統的ITelephony實例.
* @param telephony
* @return 系統的ITelephony實例
* @throws Exception
*/
public static ITelephony getITelephony(TelephonyManager telephony) throws Exception {
Method getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);//私有化函數也能使用
return (ITelephony)getITelephonyMethod.invoke(telephony);
}
}

第三步:創建電話廣播攔截器
MyPhoneBroadcastReceiver.java
package com.zhouzijing.android.demo;

import com.android.internal.telephony.ITelephony;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;

public class MyPhoneBroadcastReceiver extends BroadcastReceiver {

private final static String TAG = MyPhone.TAG;

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "[Broadcast]"+action);

//呼入電話
if(action.equals(MyPhone.B_PHONE_STATE)){
Log.i(TAG, "[Broadcast]PHONE_STATE");
doReceivePhone(context,intent);
}
}

/**
* 處理電話廣播.
* @param context
* @param intent
*/
public void doReceivePhone(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(
TelephonyManager.EXTRA_INCOMING_NUMBER);
TelephonyManager telephony = (TelephonyManager)context.getSystemService(
Context.TELEPHONY_SERVICE);
int state = telephony.getCallState();

switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.i(TAG, "[Broadcast]等待接電話="+phoneNumber);
try {
ITelephony iTelephony = PhoneUtils.getITelephony(telephony);
iTelephony.answerRingingCall();//自動接通電話
//iTelephony.endCall();//自動掛斷電話
} catch (Exception e) {
Log.e(TAG, "[Broadcast]Exception="+e.getMessage(), e);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG, "[Broadcast]電話掛斷="+phoneNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG, "[Broadcast]通話中="+phoneNumber);
break;
}
}

}

第四部:注冊電話廣播攔截器
MyPhone.java
package com.zhouzijing.android.demo;

import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;

public class MyPhone extends Activity {
public final static String TAG = "MyPhone";

public final static String B_PHONE_STATE = TelephonyManager.ACTION_PHONE_STATE_CHANGED;

private MyPhoneBroadcastReceiver mBroadcastReceiver;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_phone);
}

//按鈕1-注冊廣播
public void registerThis(View v) {
Log.i(TAG, "registerThis");
mBroadcastReceiver = new MyPhoneBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(B_PHONE_STATE);
intentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(mBroadcastReceiver, intentFilter);
}

//按鈕2-撤銷廣播
public void unregisterThis(View v) {
Log.i(TAG, "unregisterThis");
unregisterReceiver(mBroadcastReceiver);
}

}

第5步:在AndroidManifest.xml配置許可權
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE"/>

其中:
iTelephony.answerRingingCall();//自動接通電話
必須有許可權 android.permission.MODIFY_PHONE_STATE
iTelephony.endCall();//自動掛斷電話
必須有許可權 android.permission.CALL_PHONE。

C. 有哪些常用或優秀的 Android 第三方類庫

在Android類庫中,各種包寫成android.*的方式,重要包的描述如下所示:
android.app :提供高層的程序模型、提供基本的運行環境
android.content 包含各種的對設備上的數據進行訪問和發布的類
android.database :通過內容提供者瀏覽和操作資料庫
android.graphics :底層的圖形庫,包含畫布,顏色過濾,點,矩形,可以將他們直接繪制到屏幕上.
android.location :定位和相關服務的類
android.media :提供一些類管理多種音頻、視頻的媒體介面
android.net :提供幫助網路訪問的類,超過通常的java.net.* 介面
android.os :提供了系統服務、消息傳輸、IPC機制
android.opengl :提供OpenGL的工具,3D加速
android.provider :提供類訪問Android的內容提供者
android.telephony :提供與撥打電話相關的API交互
android.view :提供基礎的用戶界面介面框架
android.util :涉及工具性的方法,例如時間日期的操作
android.webkit:默認瀏覽器操作介面
android.widget:包含各種UI元素(大部分是可見的)在應用程序的屏幕中使用

D. Android能夠獲取到唯一的設備ID嗎

http://blog.csdn.net/boonya/article/details/39396331
Android的開發者在一些特定情況下都需要知道手機中的唯一設備ID。例如,跟蹤應用程序的安裝,生成用於復制保護的DRM時需要使用設備的唯一ID。在本文檔結尾處提供了作為參考的示例代碼片段。
范圍
本文提供有關如何讀取各種Android設備的 ID的介紹,用以使用標識號。本文假定用戶已經安裝了Android以及開發應用程序必要的工具。並且,本文假定用戶已了解Android的基本知識。
簡介
在搭載Android操作系統的設備中,已經存在好幾種類型的設備標識號。先前的所有Android設備都具有電話功能,因此查找每部設備硬體唯一的IMEI,MEID,或ESN也很容易。但僅能使用Wifi的設備或音樂播放器沒有電話硬體,所以沒有這種類型的唯一標識號。本文闡述了如何讀取不同Android設備的標識號。
檢索Android設備ID各種方式
以下是Android設備不同類型的識別設備ID。
· 唯一編號(IMEI,MEID,ESN,IMSI)
· MAC地址
· 序列號
· ANDROID_ID

唯一編號(IMEI,MEID,ESN,IMSI)
說明在以前,當Android設備均作為電話使用時,尋找唯一標識號比較簡單:()可用於找到(取決於網路技術)手機硬體唯一的IMEI,MEID,ESN和IMSI編號。
TelephonyManager.getDeviceId
IMEI,MEID,ESN,IMSI的定義如下:
•IMEI(國際移動設備識別碼)唯一編號,用於識別 GSM,WCDMA手機以及一些衛星電話(移動設備識別碼)全球唯一編號,用於識別CDMA移動電台設備的物理硬體,MEID出現的目的是取代ESN號段(電子序列號)(電子序列號)唯一編號,用於識別CDMA手機(國際移動用戶識別碼)與所有GSM和UMTS網路手機用戶相關聯的唯一識別編號如需要檢索設備的ID,在項目中要使用以下代碼:

•MEID
•ESN
•IMSI
import android.telephony.TelephonyManager;

import android.content.Context;

String imeistring = null;

String imsistring = null;

{

TelephonyManager telephonyManager;

telephonyManager =

( TelephonyManager )getSystemService( Context.TELEPHONY_SERVICE );

/*

* getDeviceId() function Returns the unique device ID.

* for example,the IMEI for GSM and the MEID or ESN for CDMA phones.

*/

imeistring = telephonyManager.getDeviceId();

/*

* getSubscriberId() function Returns the unique subscriber ID,

* for example, the IMSI for a GSM phone.

*/

imsistring = telephonyManager.getSubscriberId();

}
如要只讀取手機的狀態,則需添加READ_PHONE_STATE許可到AndroidManifest.xml文件中。
<uses-permission android:name="android.permission.READ_PHONE_ST

缺點
•Android設備要具有電話功能
•其工作不是很可靠
•序列號
•當其工作時,該值保留了設備的重置信息(「恢復出廠設置」),從而可以消除當客戶刪除自己設備上的信息,並把設備轉另一個人時發生的錯誤。

Mac地址
說明
可通過檢索找到設備的Wi - Fi或藍牙硬體的Mac地址。但是,不推薦使用Mac地址作為唯一的標識號。
缺點設備要具備Wi – Fi功能(並非所有的設備都有Wi – Fi功能)如果設備目前正在使用Wi - Fi,則不能報告Mac地址

序列號
從Android 2.3(「姜餅」)開始,通過android.os.Build.SERIAL方法序列號可被使用。沒有電話功能的設備也都需要上給出唯一的設備ID; 某些手機也可以需要這樣做。序列號可以用於識別MID(移動互聯網設備)或PMP(攜帶型媒體播放器),這兩種設備都沒有電話功能。通過讀取系統屬性值「ro.serialno」的方法,可以使用序列號作為設備ID 。
import java.lang.reflect.Method;

String serialnum = null;

try {

Class<?> c = Class.forName("android.os.SystemProperties");

Method get = c.getMethod("get", String.class, String.class );

serialnum = (String)( get.invoke(c, "ro.serialno", "unknown" ) );

}

catch (Exception ignored)

{

}
缺點

序列號無法在所有Android設備上使用。
ANDROID_ID
說明
更具體地說,Settings.Secure.ANDROID_ID 是一串64位的編碼(十六進制的字元串),是隨機生成的設備的第一個引導,其記錄著一個固定值,通過它可以知道設備的壽命(在設備恢復出廠設置後,該值可能會改變)。 ANDROID_ID也可視為作為唯一設備標識號的一個好選擇。如要檢索用於設備ID 的ANDROID_ID,請參閱下面的示例代碼
String androidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);

E. 怎麼分析android telephony問題

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); /** * 返回電話狀態 * * CALL_STATE_IDLE 無任何狀態時 * CALL_STATE_OFFHOOK 接起電話時 * CALL_STATE_RINGING 電話進來時 */ tm.getCallState(); //返回當前移動終端的位置 CellLocation location=tm.getCellLocation(); //請求位置更新,如果更新將產生廣播,接收對象為注冊LISTEN_CELL_LOCATION的對象,需要的permission名稱為ACCESS_COARSE_LOCATION。 location.requestLocationUpdate();

F. android 代碼獲取IMEI,IMSI都為空,怎麼解決

Android獲取IMSI和IMEI :

IMSI是一個唯一的數字,標識了GSM和UMTS 網路里的唯一一個用戶.

它存儲 在手機的SIM卡里,它會通過手機發送到網路上。

IMEI也是一串唯一的數字,標識了GSM 和UMTS網路里的三星 Galaxy I9100.。

它通常被列印在手機里電池下面的那一面,撥 *#06# 也能看到它。

代碼:

這里是你在Android里讀出 唯一的 IMSI-ID/IMEI-ID 的方法。

Java:

StringmyIMSI=

android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI

);

//withinmyemulatoritreturns:310995000000000

StringmyIMEI=

android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI

);

//withinmyemulatoritreturns:000000000000000

手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由於移動運營商沒有把手

機號碼的數據寫入到sim卡中。sim卡只有唯一的編號,供網路與設備識別那就是imsi號碼,手機的信號也可以說是通過這個號碼在網路中傳遞的,並不是手機號碼。

試想,你的sim丟失後,補辦一張新的會換號碼嗎? —不會就是因為在你的手機號碼對應的 imsi號在移動運營商中被修改成新sim卡的imsi號碼。

這個就像是一個變數,當移動運營商為它賦值了,它自然就會有值。不賦值自然為空。

/** * 獲得手機的一些標志符* *@paramc *@returnString 手機的類型 */

publicStringfetch_status(Contextc){

TelephonyManagertm=(TelephonyManager)c

.getSystemService(Context.TELEPHONY_SERVICE);//

Stringstr="";

StringIMSI=tm.getSubscriberId();

str+="DeviceId(IMEI)="+tm.getDeviceId()+"/n";

str+="DeviceSoftwareVersion="+tm.getDeviceSoftwareVersion()

+"/n";

str+="Line1Number="+tm.getLine1Number()+"/n";

return str;

}

G. android.telephony.telephonymanager怎麼反射調用

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/**
* 返回電話狀態
*
* CALL_STATE_IDLE 無任何狀態時
* CALL_STATE_OFFHOOK 接起電話時
* CALL_STATE_RINGING 電話進來時
*/
tm.getCallState();
//返回當前移動終端的位置
CellLocation location=tm.getCellLocation();
//請求位置更新,如果更新將產生廣播,接收對象為注冊LISTEN_CELL_LOCATION的對象,需要的permission名稱為ACCESS_COARSE_LOCATION。
location.requestLocationUpdate();

熱點內容
安卓轉iphone有什麼不好的 發布:2024-10-11 18:13:22 瀏覽:584
同步兩個文件夾 發布:2024-10-11 17:49:02 瀏覽:481
SQL赴日 發布:2024-10-11 17:28:25 瀏覽:389
新建文件夾的英語 發布:2024-10-11 17:28:24 瀏覽:447
對稱加密應用 發布:2024-10-11 17:27:48 瀏覽:441
ftp帶字幕 發布:2024-10-11 17:19:37 瀏覽:431
android測試環境 發布:2024-10-11 17:10:45 瀏覽:798
如何查找內網伺服器地址 發布:2024-10-11 16:54:55 瀏覽:395
cvs編譯器哪個好 發布:2024-10-11 16:54:51 瀏覽:677
SQL資料庫文件的類型 發布:2024-10-11 16:35:12 瀏覽:115