您的位置:首页 > 移动开发 > Android开发

Android 获取设备各种信息以及其它

2011-04-21 23:08 691 查看
做手机开发,想必都希望获取手机号码吧,android中有一个类android.telephony.TelephonyManager提供这个功能。

TelephonyManagertm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
numberText.setText(tm.getLine1Number());

红色标记函数能够获取本机号码。

除此之外,TelephonyManager类还提供了多种获取手机信息的函数,入imei、imsi等。、

看代码:

packagecom.pingan.innovation;

importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.telephony.TelephonyManager;
importandroid.widget.TextView;

publicclassPhoneInfoextendsActivity{
privateTextViewnumberText;
privateTextViewimeiText;
privateTextViewonText;
privateTextViewsnText;
privateTextViewimsiText;
privateTextViewssText;
privateTextViewntText;

@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

numberText=(TextView)findViewById(R.id.numberText);
imeiText=(TextView)findViewById(R.id.imeiText);
onText=(TextView)findViewById(R.id.onText);
snText=(TextView)findViewById(R.id.snText);
imsiText=(TextView)findViewById(R.id.imsiText);
ssText=(TextView)findViewById(R.id.ssText);
ntText=(TextView)findViewById(R.id.ntText);
TelephonyManagertm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
numberText.setText(tm.getLine1Number());
imeiText.setText(tm.getDeviceId());
onText.setText(tm.getNetworkOperatorName());
snText.setText(tm.getSimSerialNumber());
imsiText.setText(tm.getSubscriberId());
ssText.setText(tm.getNetworkCountryIso());
ntText.setText(tm.getNetworkOperator());
}
}

以上几个函数分别获取的是:

手机号码、imei、运营商名称、sim卡序列号、IMSI、sim卡所在国家、运营商编号。





对了,AndroidManifest.xml里面还需加上:<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

这样才能有对手机信息的访问权限。

不过,经过在HTCHero真机上的测试,发现获取不到手机号码。

在Ophone系统的多普达A6188上测试,同样也取不到手机号码。

Buildbd=newBuild();
Stringmodel=bd.MODEL;
TelephonyManagertm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
StringBuildersb=newStringBuilder();
sb.append("/nDeviceId(IMEI)="+tm.getDeviceId());
sb.append("/nDeviceSoftwareVersion="+tm.getDeviceSoftwareVersion());
sb.append("/nLine1Number="+tm.getLine1Number());
sb.append("/nNetworkCountryIso="+tm.getNetworkCountryIso());
sb.append("/nNetworkOperator="+tm.getNetworkOperator());
sb.append("/nNetworkOperatorName="+tm.getNetworkOperatorName());
sb.append("/nNetworkType="+tm.getNetworkType());
sb.append("/nPhoneType="+tm.getPhoneType());
sb.append("/nSimCountryIso="+tm.getSimCountryIso());
sb.append("/nSimOperator="+tm.getSimOperator());
sb.append("/nSimOperatorName="+tm.getSimOperatorName());
sb.append("/nSimSerialNumber="+tm.getSimSerialNumber());
sb.append("/nSimState="+tm.getSimState());
sb.append("/nSubscriberId(IMSI)="+tm.getSubscriberId());
sb.append("/nVoiceMailNumber="+tm.getVoiceMailNumber());
Log.v("DeviceInfo",sb.toString());
Log.v("Model",model);

this.registerReceiver(this.mBatInfoReceiver,newIntentFilter(
Intent.ACTION_BATTERY_CHANGED));//获得电量

BroadcastReceivermBatInfoReceiver=newBroadcastReceiver(){//广播出电量值
@Override
publicvoidonReceive(Contextarg0,Intentintent){
batterylevel=intent.getIntExtra("level",0);
updateBatteryStatsBylevel(batterylevel);
TitleInfo.batterylevel=batterylevel;
Log.i("batterylevel_value",String.valueOf(batterylevel));
}
};

packagemaximyudin.BatteryLevel;

importandroid.app.Activity;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.IntentFilter;
importandroid.os.Bundle;
importandroid.widget.TextView;

publicclassBatteryLevelextendsActivity{
privateTextViewtvBatteryLevel;

privateBroadcastReceivermBatteryInfoReceiver=newBroadcastReceiver(){
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Stringaction=intent.getAction();
if(Intent.ACTION_BATTERY_CHANGED.equals(action)){

intlevel=intent.getIntExtra("level",0);
intscale=intent.getIntExtra("scale",100);

tvBatteryLevel.setText("Batterylevel:"
+String.valueOf(level*100/scale)+"%");
}
}
};

@Override
publicvoidonResume(){
super.onResume();

registerReceiver(mBatteryInfoReceiver,newIntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}

@Override
publicvoidonPause(){
super.onPause();

unregisterReceiver(mBatteryInfoReceiver);
}

@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tvBatteryLevel=(TextView)findViewById(R.id.tvBatteryLevel);
}
}

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tvBatteryLevel"android:text="Batterylevel:"/>
</LinearLayout>

Android获取手机卡相关信息

<!--联网权限-->
<uses-permission
android:name="android.permission.INTERNET"/>
<!--获取机型信息权限-->
<uses-permission
android:name="android.permission.READ_PHONE_STATE"/>
<!--获取短信发送权限-->
<uses-permission
android:name="android.permission.SEND_SMS"/>

packagecom.mc;

importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.telephony.TelephonyManager;
importandroid.widget.TextView;

publicclassTelManagerextendsActivity{
TextViewtextView01=null;

@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView01=(TextView)this.findViewById(R.id.textView01);
//getPhoneNumber();
fetch_status();
System.out.println("-------------------onCreate");
}
publicvoidgetPhoneNumber(){
//获取手机号、手机串号信息
TelephonyManagertm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Stringimei=tm.getDeviceId();
Stringtel=tm.getLine1Number();
textView01.setText("手机串号:"+imei+"/n"+"手机号:"+tel+"/n");

}

publicvoidfetch_status(){
TelephonyManagertm=(TelephonyManager)this
.getSystemService(Context.TELEPHONY_SERVICE);//
Stringstr="";
str+="DeviceId(IMEI)="+tm.getDeviceId()+"/n";
str+="DeviceSoftwareVersion="+tm.getDeviceSoftwareVersion()
+"/n";
str+="Line1Number="+tm.getLine1Number()+"/n";
str+="NetworkCountryIso="+tm.getNetworkCountryIso()+"/n";
str+="NetworkOperator="+tm.getNetworkOperator()+"/n";
str+="NetworkOperatorName="+tm.getNetworkOperatorName()+"/n";
str+="NetworkType="+tm.getNetworkType()+"/n";
str+="honeType="+tm.getPhoneType()+"/n";
str+="SimCountryIso="+tm.getSimCountryIso()+"/n";
str+="SimOperator="+tm.getSimOperator()+"/n";
str+="SimOperatorName="+tm.getSimOperatorName()+"/n";
str+="SimSerialNumber="+tm.getSimSerialNumber()+"/n";
str+="SimState="+tm.getSimState()+"/n";
str+="SubscriberId(IMSI)="+tm.getSubscriberId()+"/n";
str+="VoiceMailNumber="+tm.getVoiceMailNumber()+"/n";
textView01.setText(str);
}
}
在Android中以上机型信息在手机状态Status里
Settings->AboutPhone->Status
各个栏目的功能介绍如下:
Batterystatus:电池充电/未充电状态
Batterylevel:电池剩余电量
Phonenumber:手机序列号
Network:所处的移动网络
Signalstrength:信号度
Networktype:网络制式
Servicestate:所在服务区
Roaming:漫游/未漫游
Dataaccess:共访问的数据大小
IMEI:IMEI码
IMEISV:IMEI码的版本
IMSI:国际移动用户识别码
Wi-FiMacaddress:G1无线Wi-Fi网络的Mac地址。
Bluetoothaddress:蓝牙地址
Uptime:正常运行时间
AwakeTime:手机唤醒时间

android获取当前手机型号:
Buildbd=newBuild();
Log.i("info",bd.MODEL+":"+bd.DEVICE+":"+bd.PRODUCT);

手机的品牌:
Build.MODELandroid.os.Build.MODEL

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)收藏

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下
viewplaincopytoclipboardprint?

1.PackageManagerpackageManager=this.getPackageManager();
2.List<PackageInfo>packageInfoList=packageManager.getInstalledPackages(0);

通过以上方法,可以得到手机中安装的所有应用程序,既包括了手动安装的apk包的信息,也包括了系统预装的应用软件的信息,要区分这两类软件可使用以下方法:
a.从packageInfoList获取的packageInfo,再通过packageInfo.applicationInfo获取applicationInfo。
b.判断(applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。
大家可以看下代码,说明已经写在注释中。
获取应用的代码:
viewplaincopytoclipboardprint?

1./**
2.*查询手机内非系统应用
3.*@paramcontext
4.*@return
5.*/
6.publicstaticList<PackageInfo>getAllApps(Contextcontext){
7.List<PackageInfo>apps=newArrayList<PackageInfo>();
8.PackageManagerpManager=context.getPackageManager();
9.//获取手机内所有应用
10.List<PackageInfo>paklist=pManager.getInstalledPackages(0);
11.for(inti=0;i<paklist.size();i++){
12.PackageInfopak=(PackageInfo)paklist.get(i);
13.//判断是否为非系统预装的应用程序
14.if((pak.applicationInfo.flags&pak.applicationInfo.FLAG_SYSTEM)<=0){
15.//customsapplications
16.apps.add(pak);
17.}
18.}
19.returnapps;
20.}

获取图片、应用名、包名:

viewplaincopytoclipboardprint?

1.PackageManagerpManager=MessageSendActivity.this.getPackageManager();
2.List<PackageInfo>appList=Utils.getAllApps(MessageSendActivity.this);
3.
4.for(inti=0;i<appList.size();i++){
5.PackageInfopinfo=appList.get(i);
6.ShareItemInfoshareItem=newShareItemInfo();
7.//setIcon
8.shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
9.//setApplicationName
10.shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
11.//setPackageName
12.shareItem.setPackageName(pinfo.applicationInfo.packageName);
13.
14.}

其中ShareItemInfo类是我本地自定义的,各位可以忽略!
另为,有人可能在找分享应用列表,在此一并说下吧。
获取支持分享的应用的代码:
viewplaincopytoclipboardprint?

1./**
2.*查询手机内所有支持分享的应用
3.*@paramcontext
4.*@return
5.*/
6.publicstaticList<ResolveInfo>getShareApps(Contextcontext){
7.List<ResolveInfo>mApps=newArrayList<ResolveInfo>();
8.Intentintent=newIntent(Intent.ACTION_SEND,null);
9.intent.addCategory(Intent.CATEGORY_DEFAULT);
10.intent.setType("text/plain");
11.PackageManagerpManager=context.getPackageManager();
12.mApps=pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
13.
14.returnmApps;
15.}

由于该方法,返回的并不是PackageInfo对象。而是ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:
viewplaincopytoclipboardprint?

1.PackageManagerpManager=MessageSendActivity.this.getPackageManager();
2.
3./*********************查询手机内所有支持分享的应用*********************/
4.List<ResolveInfo>resolveList=Utils.getShareApps(MessageSendActivity.this);
5.
6.for(inti=0;i<resolveList.size();i++){
7.ResolveInforesolve=resolveList.get(i);
8.ShareItemInfoshareItem=newShareItemInfo();
9.//setIcon
10.shareItem.setIcon(resolve.loadIcon(pManager));
11.//setApplicationName
12.shareItem.setLabel(resolve.loadLabel(pManager).toString());
13.//setPackageName
14.shareItem.setPackageName(resolve.activityInfo.packageName);
15.
16.}

总结:
通过PackageInfo获取具体信息方法:

包名获取方法:packageInfo.packageName
icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)
.requestedPermissions

通过ResolveInfo获取具体信息方法:

包名获取方法:resolve.activityInfo.packageName
icon获取获取方法:resolve.loadIcon(packageManager)
应用名称获取方法:resolve.loadLabel(packageManager).toString()

Android获取手机和系统版本等信息的代码

有时候需要统计手机的型号和版本号,利用程序可以获取到相应的手机信息,对比两部手机发现,厂商不同,某个信息显示方式也不尽相同,具体见:

StringphoneInfo="Product:"+android.os.Build.PRODUCT;
phoneInfo+=",CPU_ABI:"+android.os.Build.CPU_ABI;
phoneInfo+=",TAGS:"+android.os.Build.TAGS;
phoneInfo+=",VERSION_CODES.BASE:"+android.os.Build.VERSION_CODES.BASE;
phoneInfo+=",MODEL:"+android.os.Build.MODEL;
phoneInfo+=",SDK:"+android.os.Build.VERSION.SDK;
phoneInfo+=",VERSION.RELEASE:"+android.os.Build.VERSION.RELEASE;
phoneInfo+=",DEVICE:"+android.os.Build.DEVICE;
phoneInfo+=",DISPLAY:"+android.os.Build.DISPLAY;
phoneInfo+=",BRAND:"+android.os.Build.BRAND;
phoneInfo+=",BOARD:"+android.os.Build.BOARD;
phoneInfo+=",FINGERPRINT:"+android.os.Build.FINGERPRINT;
phoneInfo+=",ID:"+android.os.Build.ID;
phoneInfo+=",MANUFACTURER:"+android.os.Build.MANUFACTURER;
phoneInfo+=",USER:"+android.os.Build.USER;
//Toast.makeText(this,phoneInfo,Toast.LENGTH_LONG).show();
TextViewt=(TextView)findViewById(R.id.main_phoneinfo);
t.setText(phoneInfo);

android获取手机信息(deviceip,osversionetc.)

好久没有写东西了,今天在做pvlog记录,需要记录机器的osversion,机器的wifiIPaddress,当前时间等等。调查了一下,分享分享:

packagecom.osip;

importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Date;

importandroid.app.Activity;
importandroid.net.wifi.WifiInfo;
importandroid.net.wifi.WifiManager;
importandroid.os.Bundle;
importandroid.widget.TextView;

publicclassOsipextendsActivity{
privateTextViewosVersion,clientIp,date;

/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

osVersion=(TextView)findViewById(R.id.os_version);
clientIp=(TextView)findViewById(R.id.client_ip);
date=(TextView)findViewById(R.id.date);

Stringformat="yyyyMMdd.HHmmss.SSSZ";//带毫秒和时区的时间格式
Stringversion=getosVersion();
Stringip=getIp();
StringcDate=getDate(newDate(),format);

osVersion.setText(version);
clientIp.setText(ip);
date.setText(cDate.substring(0,22));
}

privateStringgetDate(Datedate,Stringformat){
DateFormatdateFormat=newSimpleDateFormat(format);
returndateFormat.format(date);
}

//取得device的IPaddress
privateStringgetIp(){
WifiManagerwifiManager=(WifiManager)getSystemService(WIFI_SERVICE);
WifiInfowifiInfo=wifiManager.getConnectionInfo();
intipAddress=wifiInfo.getIpAddress();

//格式化IPaddress,例如:格式化前:1828825280,格式化后:192.168.1.109
Stringip=String.format("%d.%d.%d.%d",
(ipAddress&0xff),
(ipAddress>>8&0xff),
(ipAddress>>16&0xff),
(ipAddress>>24&0xff));
returnip;

}

//获取device的osversion
privateStringgetosVersion(){
Stringversion=android.os.Build.VERSION.RELEASE;
returnversion;
}
}

在android系统中获取imei号和其他手机信息

如果需要通过androidSDK获取手机相关信息。需要通过如下方式获取:

TelephonyManagertelephonyManager=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);

Stringimei=telephonyManager.getDeviceId();


不过,光这么写,会有类似如何查看android产生的异常的报错,主要是因为android的权限需要打开,在AndroidManifest.xml文件中增加:

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>


就可以拿到手机的imei号了。

TelephonyManager还有其他方法可以调用,获取手机的其他信息。

比如获取手机号码,可以这样:

telephonyManager.getLine1Number();

不过在g1手机上测试,使用移动全球通的sim卡,无法得到手机号码,是个空字符串。

获取手机的sim卡号

telephonyManager.getSimSerialNumber();

这个可以在上述环境下得到。

获取客户id,在gsm中是imsi号:

telephonyManager.getSubscriberId();

这个也能在商户环境得到。

android手机获取手机唯一识别号

在开发手机应用时,开发者最关心的是开发的手机软件有多少用户安装,并且正在使用。这就需要识别手机的唯一性。目前我了解的有两种方法,

获取手机的imei号(imei号是唯一识别手机的号码)。

获取androidid号(androidid是手机系统的唯一号码)。

第一种方法:

android获取手机imei号的方法在在android系统中获取imei号和其他手机信息一文中做了详细的介绍。其中android在2.0以上的版本中,获取手机imei号已经不需要相应的读取手机信息的权限了。

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

但是目前1.6以下的版本用户占用户的近50%,如果想要让1.6以下版本的用户也可以获取imei号,那就要添加权限。

好处是唯一标识手机,缺点是可能需要相应的用户权限。

第二种方法:

可以获取androidid号,如果一个手机设备第一次启动随即产生的一个数字,如果系统改变,该号可能会改变。

androidid号解释:http://androidappdocs-staging.appspot.com/reference/android/provider/Settings.Secure.html#ANDROID_ID

获取方法:

Stringt=android.provider.Settings.System.getString(getContentResolver(),"android_id");
Log.i("huilurry","android_id="+t);

Ms测试结果:

07-1313:12:49.835:INFO/huilurry(17455):android_id=20014289e714f20c

好处是所有版本都试用,缺点是可能会和其他机子重复或本机改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: