首页 > 系统 > Android > 正文

Android中简单的电话管理与短信管理App编写实例

2019-12-12 06:30:50
字体:
来源:转载
供稿:网友

android电话管理器(TelephonyManger)实例:
TelephonyManger是管理电话状态、网络信息的服务类。
添加权限:

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

逻辑功能:

package com.example.telephonystatus;  import java.io.FileNotFoundException; import java.io.OutputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map;  import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.view.Menu; import android.widget.ListView; import android.widget.SimpleAdapter;  public class MainActivity extends Activity {    private ListView list1;    // 声明代表状态名的数组   private String[] statusName;   // 声明代表手机状态名的集合   private ArrayList<String> statusValues = new ArrayList<String>();    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     list1 = (ListView) findViewById(R.id.list1);     // 获取系统的TelephonyManager     TelephonyManager tele = (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 = new ArrayList<Map<String, Object>>();     for (int i = 0; i < statusValues.size(); i++) {       HashMap<String, Object> hasp = new HashMap<String, Object>();       hasp.put("name", statusName[i]);       hasp.put("values", statusValues.get(i));       list.add(hasp);     }     SimpleAdapter simple = new SimpleAdapter(this, list, R.layout.items,         new String[] { "name", "values" }, new int[] { R.id.text1,             R.id.text2 });     list1.setAdapter(simple);     // 创建一个电话监听器         PhoneStateListener listener = new PhoneStateListener() {            // 监听电话呼叫状态           @Override           public void onCallStateChanged(int state, String incomingNumber) {              switch (state) {             // 无任何状态             case TelephonyManager.CALL_STATE_IDLE:               break;             case TelephonyManager.CALL_STATE_OFFHOOK:               break;             // 来电响铃             case TelephonyManager.CALL_STATE_RINGING:               OutputStream os = null;               try {                 os = openFileOutput("phoneList", MODE_APPEND);               } catch (FileNotFoundException e) {                 e.printStackTrace();               }               PrintStream ps = new PrintStream(os);               // 讲电话号码记录到文件中               ps.println(new Date() + "来电:" + incomingNumber);               ps.close();               break;             default:               break;             }             super.onCallStateChanged(state, incomingNumber);           }          };         tele.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);   }    @Override   public boolean onCreateOptionsMenu(Menu menu) {     // Inflate the menu; this adds items to the action bar if it is present.     getMenuInflater().inflate(R.menu.main, menu);     return true;   }  } 

android短信管理器(SmsManager)实例
需要注册的权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>  <uses-permission android:name="android.permission.SEND_SMS"/> 

群发短信功能:

package com.android.xiong.groupsend;  import java.util.ArrayList; import java.util.List;  import android.app.Activity; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; import android.telephony.SmsManager; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast;  public class MainActivity extends Activity {    private Button bt1, bt2;   private EditText ed1, ed2;   private SmsManager sManger;   List<String> sendList = new ArrayList<String>();    @Override   protected void onCreate(Bundle savedInstanceState) {     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(new OnClickListener() {        @Override       public void onClick(View v) {         for (String send : sendList) {           // 创建PendIntent对象           PendingIntent ped = PendingIntent.getActivity(               MainActivity.this, 0, new Intent(), 0);           // 发送信息           sManger.sendTextMessage(send, null, ed2.getText()               .toString(), ped, null);         }         // 提示消息发送完毕         Toast.makeText(MainActivity.this, "短信群发完", Toast.LENGTH_LONG)             .show();       }     });     bt2.setOnClickListener(new OnClickListener() {        @Override       public void onClick(View v) {         // 查看联系人的电话号码         final Cursor cursor = getContentResolver().query(             ContactsContract.CommonDataKinds.Phone.CONTENT_URI,             null, null, null, null);         BaseAdapter adapter = new BaseAdapter() {            @Override           public View getView(int position, View convertView,               ViewGroup parent) {             cursor.moveToPosition(position);             CheckBox rb = new CheckBox(MainActivity.this);             // 获取联系人的电话号码 并去掉中间的中画、空格             String number = cursor                 .getString(                     cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))                 .replace("-", "");             rb.setText(number);             // 如果该号码已经加入发送人名单,默认勾选该号码             if (sendList.contains(number)) {               rb.setChecked(true);             }             return rb;           }            @Override           public long getItemId(int position) {             // TODO Auto-generated method stub             return position;           }            @Override           public Object getItem(int position) {             // TODO Auto-generated method stub             return position;           }            @Override           public int getCount() {             // TODO Auto-generated method stub             return cursor.getCount();           }         };         // 加载list.xml布局文件对应的View         View selectView = getLayoutInflater().inflate(R.layout.item,             null);         final ListView listView = (ListView) selectView             .findViewById(R.id.list1);         listView.setAdapter(adapter);         new AlertDialog.Builder(MainActivity.this).setView(selectView).setPositiveButton("确定", new DialogInterface.OnClickListener() {                      @Override           public void onClick(DialogInterface dialog, int which) {             //清空sendList集合             sendList.clear();             //遍历listView组件的每个列表项             for(int i=0;i<listView.getCount();i++){               CheckBox checkBox=(CheckBox)listView.getChildAt(i);               //如果该列表项被勾选               if(checkBox.isChecked()){                 //添加到该列表项中                 sendList.add(checkBox.getText().toString());                 ed1.append(checkBox.getText().toString()+",");               }             }                        }         }).show();       }     });   }    @Override   public boolean onCreateOptionsMenu(Menu menu) {     // Inflate the menu; this adds items to the action bar if it is present.     getMenuInflater().inflate(R.menu.main, menu);     return true;   }  } 
<LinearLayout xmlns: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> 
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: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> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表