1 首先要说的就是PackageManager
其实就是检索当前已经安装在设备上的与这个应用有联系的各种信息的一个类,通过getPackageManager()获得这个类的实例
先来段代码看看:
PackageManager pm = getPackageManager(); try { //运用包管理者获得清单文件中的信息 PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0); System.out.println("packageInfo.versionCode="+packageInfo.versionCode); System.out.println("packageInfo.versionName="+packageInfo.versionName); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
上面代码即使简单的调用PackManager来获得一些关于应用的信息。
2 PhoneManager
3
3.1 SmsManager
SmsManager 管理发短信的一个manager,貌似在api19及以上版本的用法推荐去看Telephony,下面是android文档的原版建议
For information about how to behave as the default SMS app on Android 4.4 (API level 19) and higher, see Telephony.
介绍下方法:
// 将一个字符串(短信太长了)分为几个较短的字符串(短信)存入一个ArrayList中 // divideMessage(String text) // 获得smsManager 静态的构造方法 // getDefault() // 3个发送消息的方法 // sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) // sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) // sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
来一段发短信的代码: 案例中,发送的短信内容是 “sim”,短信接收号码是“contact_number”
SmsManager smsManager=SmsManager.getDefault(); String contact_number=SpUtil.getString(arg0, ConstantValue.CONTACT_PHONE, ""); smsManager.sendTextMessage(contact_number, null, "sim", null, null);
发送短信还可以使用意图发送
private void sendMessage2() { Uri uri = Uri.parse("smsto:"+et.getText()); Intent intent = new Intent(Intent.ACTION_VIEW,uri); intent.putExtra("sms_body",etMessage.getText().toString()); startActivity(intent); }
3.2 SmsMessage 主要用于接收短信吧
// 从广播接收者的意图中获取短信信息
Object[] objects = (Object[]) arg1.getExtras().get("pdus"); // 循环遍历短信 for (Object object : objects) { // 获取短信对象的基本信息 此方法已不推荐使用 ******************************************************
// 推荐使用这个SmsMessage.createFromPdu(byte[] bytes,String format) SmsMessage smsMessage = SmsMessage .createFromPdu((byte[]) object); // 获取短信对象的基本信息 // 获取收信人信息 String originatingAddress = smsMessage.getOriginatingAddress(); String messageBody = smsMessage.getMessageBody(); System.out.println("接收的短信为:" + messageBody);
4 LocationManager 手机位置的Manager,这个应该没什么好说的,直接看代码即可
//获取手机的经纬度坐标 //首先获取 LocationManager lm=(LocationManager) getSystemService(Context.LOCATION_SERVICE); //获得一Criteria 标准对象 Criteria criteria=new Criteria(); //设置允许花费 criteria.setCostAllowed(true); //设置获得最准确的位置信息 criteria.setAccuracy(Criteria.ACCURACY_FINE); String bestProvider=lm.getBestProvider(criteria, true); //在一定时间内,移动一定距离后获取经纬度信息 lm.requestLocationUpdates(bestProvider, 0, 0, new LocationListener() { @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { //状态发生改变时触发(地上或地下等等) } @Override public void onProviderEnabled(String arg0) { } @Override public void onProviderDisabled(String arg0) { } @Override public void onLocationChanged(Location arg0) { //经度 double longitude=arg0.getLongitude(); double latitude=arg0.getLatitude(); System.out.println("经度:"+longitude+"纬度:"+latitude); //4 发送短信和加权限 SmsManager smsManager=SmsManager.getDefault(); smsManager.sendTextMessage("5556", null,"longitude:"+longitude+"latitude:"+latitude, null, null); } });