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>