Android中简单的电话管理与短信管理App编写实例
android电话管理器(TelephonyManger)实例:
TelephonyManger是管理电话状态、网络信息的服务类。
添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
逻辑功能:
packagecom.example.telephonystatus; importjava.io.FileNotFoundException; importjava.io.OutputStream; importjava.io.PrintStream; importjava.util.ArrayList; importjava.util.Date; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importandroid.os.Bundle; importandroid.app.Activity; importandroid.content.Context; importandroid.telephony.PhoneStateListener; importandroid.telephony.TelephonyManager; importandroid.view.Menu; importandroid.widget.ListView; importandroid.widget.SimpleAdapter; publicclassMainActivityextendsActivity{ privateListViewlist1; //声明代表状态名的数组 privateString[]statusName; //声明代表手机状态名的集合 privateArrayList<String>statusValues=newArrayList<String>(); @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list1=(ListView)findViewById(R.id.list1); //获取系统的TelephonyManager TelephonyManagertele=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); //获取各种状态名的数组 statusName=getResources().getStringArray(R.array.statusNames); //获取SIM卡的状态的数组 String[]simType=getResources().getStringArray(R.array.simState); //获取电话网络类型的数组 String[]phoneType=getResources().getStringArray(R.array.phoneType); //获取设备编号 statusValues.add(tele.getDeviceId()); //获取系统平台的版本 statusValues.add(tele.getDeviceSoftwareVersion()!=null?tele .getDeviceSoftwareVersion():"未知"); //获取网络运营代号 statusValues.add(tele.getNetworkOperator()); //获取网络运营商的名称 statusValues.add(tele.getNetworkOperatorName()); //获取手机网络的类型 statusValues.add(phoneType[tele.getPhoneType()]); //获取设为所在的位置 statusValues.add(tele.getCellLocation()!=null?tele .getCellLocation().toString():"未知"); //获取sim卡的国别 statusValues.add(tele.getSimCountryIso()); //获取sim卡的序列号 statusValues.add(tele.getSimSerialNumber()); //获取sim卡的状态 statusValues.add(simType[tele.getSimState()]); List<Map<String,Object>>list=newArrayList<Map<String,Object>>(); for(inti=0;i<statusValues.size();i++){ HashMap<String,Object>hasp=newHashMap<String,Object>(); hasp.put("name",statusName[i]); hasp.put("values",statusValues.get(i)); list.add(hasp); } SimpleAdaptersimple=newSimpleAdapter(this,list,R.layout.items, newString[]{"name","values"},newint[]{R.id.text1, R.id.text2}); list1.setAdapter(simple); //创建一个电话监听器 PhoneStateListenerlistener=newPhoneStateListener(){ //监听电话呼叫状态 @Override publicvoidonCallStateChanged(intstate,StringincomingNumber){ switch(state){ //无任何状态 caseTelephonyManager.CALL_STATE_IDLE: break; caseTelephonyManager.CALL_STATE_OFFHOOK: break; //来电响铃 caseTelephonyManager.CALL_STATE_RINGING: OutputStreamos=null; try{ os=openFileOutput("phoneList",MODE_APPEND); }catch(FileNotFoundExceptione){ e.printStackTrace(); } PrintStreamps=newPrintStream(os); //讲电话号码记录到文件中 ps.println(newDate()+"来电:"+incomingNumber); ps.close(); break; default: break; } super.onCallStateChanged(state,incomingNumber); } }; tele.listen(listener,PhoneStateListener.LISTEN_CALL_STATE); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.main,menu); returntrue; } }
android短信管理器(SmsManager)实例
需要注册的权限:
<uses-permissionandroid:name="android.permission.READ_CONTACTS"/> <uses-permissionandroid:name="android.permission.SEND_SMS"/>
群发短信功能:
packagecom.android.xiong.groupsend; importjava.util.ArrayList; importjava.util.List; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.app.PendingIntent; importandroid.content.DialogInterface; importandroid.content.Intent; importandroid.database.Cursor; importandroid.os.Bundle; importandroid.provider.ContactsContract; importandroid.telephony.SmsManager; importandroid.view.Menu; importandroid.view.View; importandroid.view.ViewGroup; importandroid.view.View.OnClickListener; importandroid.widget.BaseAdapter; importandroid.widget.Button; importandroid.widget.CheckBox; importandroid.widget.EditText; importandroid.widget.ListView; importandroid.widget.Toast; publicclassMainActivityextendsActivity{ privateButtonbt1,bt2; privateEditTexted1,ed2; privateSmsManagersManger; List<String>sendList=newArrayList<String>(); @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt1=(Button)findViewById(R.id.bt1); bt2=(Button)findViewById(R.id.bt2); ed1=(EditText)findViewById(R.id.ed1); ed2=(EditText)findViewById(R.id.ed2); //获取SmsManger sManger=SmsManager.getDefault(); bt1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ for(Stringsend:sendList){ //创建PendIntent对象 PendingIntentped=PendingIntent.getActivity( MainActivity.this,0,newIntent(),0); //发送信息 sManger.sendTextMessage(send,null,ed2.getText() .toString(),ped,null); } //提示消息发送完毕 Toast.makeText(MainActivity.this,"短信群发完",Toast.LENGTH_LONG) .show(); } }); bt2.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //查看联系人的电话号码 finalCursorcursor=getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null,null); BaseAdapteradapter=newBaseAdapter(){ @Override publicViewgetView(intposition,ViewconvertView, ViewGroupparent){ cursor.moveToPosition(position); CheckBoxrb=newCheckBox(MainActivity.this); //获取联系人的电话号码并去掉中间的中画、空格 Stringnumber=cursor .getString( cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) .replace("-",""); rb.setText(number); //如果该号码已经加入发送人名单,默认勾选该号码 if(sendList.contains(number)){ rb.setChecked(true); } returnrb; } @Override publiclonggetItemId(intposition){ //TODOAuto-generatedmethodstub returnposition; } @Override publicObjectgetItem(intposition){ //TODOAuto-generatedmethodstub returnposition; } @Override publicintgetCount(){ //TODOAuto-generatedmethodstub returncursor.getCount(); } }; //加载list.xml布局文件对应的View ViewselectView=getLayoutInflater().inflate(R.layout.item, null); finalListViewlistView=(ListView)selectView .findViewById(R.id.list1); listView.setAdapter(adapter); newAlertDialog.Builder(MainActivity.this).setView(selectView).setPositiveButton("确定",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //清空sendList集合 sendList.clear(); //遍历listView组件的每个列表项 for(inti=0;i<listView.getCount();i++){ CheckBoxcheckBox=(CheckBox)listView.getChildAt(i); //如果该列表项被勾选 if(checkBox.isChecked()){ //添加到该列表项中 sendList.add(checkBox.getText().toString()); ed1.append(checkBox.getText().toString()+","); } } } }).show(); } }); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.main,menu); returntrue; } }
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <EditText android:id="@+id/ed1" android:layout_width="match_parent" android:layout_height="wrap_content"/> <EditText android:id="@+id/ed2" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取联系人"/> <Button android:id="@+id/bt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送信息"/> </LinearLayout>
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/list1" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </LinearLayout>