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

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>
(0)

相关推荐

  • Android 实现电话拦截及拦截提示音功能的开发

    本文所讲的内容是在Android系统中如何写程序进行电话拦截,并发出拦截提示音提醒用户,可以说此功能还是比较实用的.        1.电话拦截 这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏方法来实现.        2.拦截后提示忙音/空号/已关机/已停机 这个功能其实是要用到MMI指令,具体如何设置呼叫转移的指定可以参考这里 http://baike.baidu.com/view/206402.html?fromTaglist. 在本文中我们会用到"遇忙转移&qu

  • Android广播接实现监听电话状态(电话的状态,拦截)

    首先我们来理解下监听器的机制. Android的事件处理机制有两种:监听和回调. A基于监听的事件处理 主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件监听器) 监听机制处理事件的流程图如下(委派式:Delegation): 1:需要在AndroidManifest.xml清单中添加权限 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS&q

  • Android6.0来电号码与电话薄联系人进行匹配

    本文将介绍系统接收到来电之后,如何在电话薄中进行匹配联系人的流程.分析将从另外一篇文章(基于Android6.0的RIL框架层模块分析)中提到的与本文内容相关的代码开始. //packages/service/***/Call.java public void handleCreateConnectionSuccess( CallIdMapper idMapper, ParcelableConnection connection) { setHandle(connection.getHandle

  • Android 实现电话来去自动录音的功能

    我们在使用Android手机打电话时,有时可能会需要对来去电通话自动录音,本文就详细讲解实现Android来去电通话自动录音的方法,大家按照文中的方法编写程序就可以完成此功能. 来去电自动录音的关键在于如何监听手机电话状态的转变: 1)来电的状态的转换如下(红色标记是我们要用到的状态) 空闲(IDEL)--> 响铃(RINGING)--> 接听(ACTIVE)--> 挂断(经历DISCONNECTING--DISCONNECTED)--> 空闲(IDEL) 或者  空闲(IDEL)

  • Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)

    本文实例讲述了Android监听手机电话状态与发送邮件通知来电号码的方法.分享给大家供大家参考,具体如下: 在android中可以用PhoneStateListener来聆听手机电话状态(比如待机.通话中.响铃等).本例是通过它来监听手机电话状态,当手机来电时,通过邮件将来电号码发送到用户邮箱的例子.具体程序如下: import android.app.Activity; import android.content.Intent; import android.os.Bundle; impor

  • Android拨打电话功能实例详解

    本文实例分析了Android拨打电话功能.分享给大家供大家参考,具体如下: 打电话是手机的一个最基本的功能,现在android智能手机非常流行,里面有多种多样的精彩的手机功能,但是android手机如何实现打电话这个基本功能呢?现以实例说明如下.首先呈上程序: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.content.Int

  • Android 实现手机拨打电话的功能

    一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

  • Android 实现手机接通电话后振动提示的功能

    有些手机在电话接通后会有振动提示,这有个好处就是可以等到接通后再放到耳边接听,减少辐射.本文就讲讲如何在Android手机中实现这种接通电话后的振动提示功能,这里主要针对拨出的电话.      Android SDK提供的通话状态 很明显,要在电话接通的时候产生振动提示,首先需要知道电话在何时被接通.而Android SDK并没有给出直接读取这种状态的方法.下面是Android SDK的电话服务类TelephonyManager提供的三种电话状态: CALL_STATE_IDLE        

  • Android编程实现从字符串中查找电话号码的方法

    本文实例讲述了Android编程实现从字符串中查找电话号码的方法.分享给大家供大家参考,具体如下: /** * 从字符串中查找数字字符串 */ private List<String> getNumbers(String content) { List<String> digitList = new ArrayList<String>(); Pattern p = Pattern.compile("(\\d+)"); Matcher m = p.ma

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

    android电话管理器(TelephonyManger)实例: TelephonyManger是管理电话状态.网络信息的服务类. 添加权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 逻辑功能:

  • android短信管理器SmsManager实例详解

    本文实例为大家分享了android短信管理器SmsManager的具体代码,供大家参考,具体内容如下 需要注册的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.SEND_SMS"/> 群发短信 package com.android.xiong.grou

  • Android使用Intent的Action和Data属性实现点击按钮跳转到拨打电话和发送短信界面

    场景 点击拨打电话按钮,跳转到拨打电话页面 点击发送短信按钮,跳转到发送短信页面 注: 实现 将布局改为LinearLayout,并通过android:orientation="vertical">设置为垂直布局,然后添加id属性. 然后添加两个按钮,并设置Id属性与显示文本. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="

  • Android开发中通过手机号+短信验证码登录的实例代码

    首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码. 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了. activity_login.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

  • Android中简单调用图片、视频、音频、录音和拍照的方法

    本文实例讲述了Android中简单调用图片.视频.音频.录音和拍照的方法.分享给大家供大家参考,具体如下: //选择图片 requestCode 返回的标识 Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT" innerIntent.setType(contentType); //查看类型 String IMAGE_UNSPECIFIED =

  • Andriod Studio实现拨打电话和发送短信的示例代码

    在 Android Studio中创建项目,然后在该项目中创建一个Module名称为“IntentDial”.在该 Module中实现本实例,具体步骤如下:(1)在新建 Module的res\layout目录下添加布局文件shouji.xml,将添加的布局管理器设置为相对布局管理器,然后在布局管理器中添加4个用于显示公司信息的文本框,再添加两个 ImageButton 组件,分别为拨打电话按钮和发送短信按钮.代码如下: <?xml version="1.0" encoding=&

  • Android中使用七牛云存储进行图片上传下载的实例代码

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了. 可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端

  • Django中如何使用celery异步发送短信验证码详解

    目录 1.celery介绍 1.1 celery应用举例 1.2 Celery有以下优点 1.3 Celery 特性 2.工作原理 2.1 Celery 扮演生产者和消费者的角色 3.异步发短信 总结 1.celery介绍 1.1 celery应用举例 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用celery 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着

  • Android 中按home键和跳转到主界面的实例代码

    //home Intent intent= new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //如果是服务里调用,必须加入new task标识 intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); //主界面 Intent intent = new Intent(Intent.ACTION_MAIN,null)

  • Android使用第三方服务器Bmob实现发送短信验证码

    调用Bmob第三方服务器实现短信验证的功能,大致思路如下: 随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给指定手机发送这6位验证码,然后感觉用户输入的数字进行判断,如果输入的和发送的相等,则验证成功. 第一步.请求验证码: SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sendTime = format.format(new Date());

随机推荐