Android中简单的电话管理与短信管理App编写实例
作者:剑萧舞蝶 发布时间:2021-10-11 13:45:50
标签:Android,电话,短信
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
投稿
猜你喜欢
- 1.预警需求为了更好的管理商品日期,需要对仓库的商品进行预警管理,对商品的保质期控制在一个范围内提示出来,也可以通过该功能间接的展示出一个商
- 本文实例讲述了java继承中的构造方法。分享给大家供大家参考。具体如下:继承中的构造方法: 1、子类的构造过程中必须调用其基类的构造方法。2
- 一 前言redis在分布式应用十分广泛,本篇文章也是互联网面试的重点内容,读者至少需要知道为什么需要分布式锁,分布式锁的实现原理,分布式锁的
- 1.servlet:定义:接口2.配置servlet:public class HelloServlet extends HttpServl
- 本文实例为大家分享了Android霓虹闪烁文字效果的具体代码,供大家参考,具体内容如下package com.example.apple.s
- 目录IO简介1.流Stream 2.IO流的继承结构3 File文件类3.1概述3.2创建对象3.3常用方法 3.4 练
- 一. 封装封装是面向对象的三大特性之一;面向对象程序三大特性:封装、继承、多态 。封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和
- 文件上传页面<%@ page language="java" contentType="text/htm
- 大家好,这是 [C#.NET 拾遗补漏] 系列的第 07 篇文章。在 C# 中,大多数方法都是通过 return 语句立即把程序的控制权交回
- 最大单词长度乘积给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]
- ModbusModbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、T
- zuul添加或修改请求参数一、为什么要用到这个在基于 springcloud 构建的微服务系统中,通常使用网关zuul来进行一些用户验证等过
- 本文实例中的自定义类PictureBox继承于UserControl,最终实现简单的分屏功能。分享给大家供大家参考之用。具体实现代码如下:p
- 本文实例讲述了C#实现winform自动关闭MessageBox对话框的方法。分享给大家供大家参考。具体实现方法如下:using Syste
- 要完成一个轮播图片,首先想到的应该是使用ViewPager来实现。ViewPager已经有了滑动的功能,我们只要让它自己滚动。再加上下方的小
- 在我们的程序当中如果要实现类似《360软件管家》的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实
- Java泛型是JDK 5引入的一个特性,它允许我们定义类和接口的时候使用参数类型,泛型在集合框架中被广泛使用。类型擦除是泛型中最让人困惑的部
- 支持趋势线的图表类型包括二维面积图、条形图、柱形图、柱形图、股价图、xy (散点图) 和气泡图中;不能向三维、堆积、雷达图、饼图、曲面图或圆
- 面对一个项目,对于Android应用开发框架的选择,我想过三种方案:1.使用Loader + HttpClient + GreenDao +
- 求一个n阶行列式,一个比较简单的方法就是使用全排列的方法,那么简述以下全排列算法的递归实现。首先举一个简单的例子说明算法的原理,既然是递归,