电话管理器TelephoneManager

第一个实例是获取网络和SIM卡信息:
界面是一个列表,这里省略,Java代码如下:

public class MainActivity extends Activity
{
ListView showView;
// 声明代表状态名的数组
String[] statusNames;
// 声明代表手机状态的集合
ArrayList<String> statusValues = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 使用TelephonyManager
TelephonyManager tManager = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
// 从资源文件array中获取各种状态名称的数组
statusNames = getResources().getStringArray(R.array.statusNames);
// 从资源文件array中获取代表SIM卡状态的数组
String[] simState = getResources()
.getStringArray(R.array.simState);
// 从资源文件array中获取代表电话网络类型的数组
String[] phoneType = getResources().getStringArray(
R.array.phoneType);
// 获取设备编号
statusValues.add(tManager.getDeviceId());
// 获取系统平台的版本
statusValues.add(tManager.getDeviceSoftwareVersion()
!= null ? tManager.getDeviceSoftwareVersion() : "未知");
// 获取网络运营商代号
statusValues.add(tManager.getNetworkOperator());
// 获取网络运营商名称
statusValues.add(tManager.getNetworkOperatorName());
// 获取手机网络类型
statusValues.add(phoneType[tManager.getPhoneType()]);
// 获取设备所在位置
statusValues.add(tManager.getCellLocation() != null ? tManager
.getCellLocation().toString() : "未知位置");
// 获取SIM卡的国别
statusValues.add(tManager.getSimCountryIso());
// 获取SIM卡序列号
statusValues.add(tManager.getSimSerialNumber());
// 获取SIM卡状态
statusValues.add(simState[tManager.getSimState()]);
showView = (ListView) findViewById(R.id.show);
ArrayList<Map<String, String>> status = new ArrayList<>();
// 将StatusNames、statusValues的数据封装到List<Map<String , String>>集合中
for (int i = 0; i < statusValues.size(); i++)
{
HashMap<String, String> map = new HashMap<>();
map.put("name", statusNames[i]);
map.put("value", statusValues.get(i));
status.add(map);
}
// 使用SimpleAdapter封装List数据
SimpleAdapter adapter = new SimpleAdapter(this, status,
R.layout.line, new String[] { "name", "value" }
, new int[] { R.id.name, R.id.value });
// 为ListView设置Adapter
showView.setAdapter(adapter);
}
}

第二个实例是监听手机来电:

public class MainActivity extends AppCompatActivity {
TelephonyManager tManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//取得TelephonyManager对象
tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
//创建通话状态监听器
PhoneStateListener listener = new PhoneStateListener(){
public void onCallStateChanged(int state, String number){
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() + " 来电 " + number);
ps.close();
break;
default : break;
}
super.onCallStateChanged(state, number);
}
};
//监听电话通话状态的改变
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
}

短信管理器SMSManager

下面是一个发送短信的实例:

界面只有一个输入框和一个按钮,这里省略,Java代码如下:

public class MainActivity extends AppCompatActivity {
EditText number, content;
Button send;
SmsManager sManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取SmsManager
sManager = SmsManager.getDefault();
number = (EditText) findViewById(R.id.number);
content = (EditText) findViewById(R.id.content);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建一个PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this,
0, new Intent(), 0);
//发送短信
sManager.sendTextMessage(number.getText().toString(),
null, content.getText().toString(), pi, null);
//提示短信发送完成
Toast.makeText(MainActivity.this, "短信发送完成", Toast.LENGTH_SHORT).show();
}
});
}
}

不要忘记在AndroidManifest.xml文件中授予发送短信的权限:

<user-permission android: name="android.permission.SEND_SMS">

音频管理器AudioManager

AudioManager刻意管理系统不同种类的音量,下面是一个控制音乐音量的实例,布局文件如下:

一共四个按钮,前三个是普通的Button,功能分别是播放音乐,加大音量,减小音量

第四个是ToggleButton,控制开启静音与关闭静音

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/play"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/up"
/>
<Button
android:id="@+id/down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/down"
/>
<ToggleButton
android:id="@+id/mute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="@string/normal"
android:textOff="@string/mute"
/>
</LinearLayout>
</LinearLayout>

Java代码如下:

public class MainActivity extends AppCompatActivity {
Button play, up, down;
ToggleButton mute;
AudioManager aManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
play = (Button) findViewById(R.id.play);
up = (Button) findViewById(R.id.up);
down = (Button) findViewById(R.id.down);
mute = (ToggleButton) findViewById(R.id.mute);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//初始化MediaPlayer对象,准备播放音乐
MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.abc);
//设置循环播放
mPlayer.setLooping(true);
//开始播放
mPlayer.start();
}
});
up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}
});
down.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
}
});
mute.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
aManager.setStreamMute(AudioManager.STREAM_MUSIC,isChecked);
}
});
}
}

aManager.adjustStreamVolume方法是调整手机指定类型的声音,该方法有三个参数
第一个参数是调整声音的类型,比如STREAM_MUSIC就是手机音乐的声音。
第二个参数是选择音量的增大(ADJUST_RAISE)或减小(ADJUST_LOWER)。
第三个参数是调整声音时的标志,比如FLAG_SHOW_UI,是在调整声音时显示进度条

振动器Vibrator

Vibarator控制手机的振动,下面是一个小例子。

public class MainActivity extends AppCompatActivity {
Vibrator vibrator;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_main);
//获取Vibrator服务
vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
}
//重写onTouchEvent方法,当用户触碰触摸屏时触发这个方法
public boolean onTouchEvent(MotionEvent event){
Toast.makeText(this, "手机振动", Toast.LENGTH_SHORT).show();
//振动2秒钟
vibrator.vibrate(2000);
return super.onTouchEvent(event);
}
}

vibrator.vibrate()实现手机的振动,括号里的参数是振动的时间。

Android的几种Manager的更多相关文章

  1. 【Android】一种提高Android应用进程存活率新方法

    [Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...

  2. eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager

    eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager选项的解决办法 - zhjr1220的专栏 - 博客频道 - CSDN.NET  http: ...

  3. Android动画 三种动画

    Android可以使用三种动画 Frame Animation-帧动画 ,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果 Tween Animation-补间动画,给出两个关键帧, ...

  4. Android开发之三种动画

    转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...

  5. eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager选项的解决办法

    在eclipse中点击window→Customize Perspective→Command Groups availability→Available command groups下勾选Andro ...

  6. Android中三种超实用的滑屏方式汇总(转载)

    Android中三种超实用的滑屏方式汇总   现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于 ...

  7. Unity调用Android的两种方式:其一、调用jar包

    unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...

  8. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程 ...

  9. android的几种“通知”方式简单实现(Notification&NotificationManager)

    关于通知Notification相信大家都不陌生了,平时上QQ的时候有消息来了或者有收到了短信,手机顶部就会显示有新消息什么的,就类似这种.今天就稍微记录下几种Notification的用法.3.0以 ...

随机推荐

  1. python3编程练习题

    记录一些基础编程练习题和一些遇见的坑 1)输出0到100的数字,如果数字是3的倍数输出Fizz,5的倍数输出Buzz.同时是3和5的倍数输出FizzBuzz,其他情况则打印原数字 for i in r ...

  2. 【原创】大叔经验分享(25)hive通过外部表读写hbase数据

    在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table(key string, name string,desc string) STORED BY ' ...

  3. java类型转换小技巧

    mysql 之排序显示行号 select @r := @r+1 as rownum,birth,cardNo from card,(select @r:=0)torder by birth ASC

  4. WPF样式中TargetType 属性 (Property) 和 x:Key 属性 (Attribute)

    如第一个示例所示,如果将 TargetType 属性设置为 TextBlock 而不为样式分配 x:Key,样式就会应用于所有 TextBlock 元素.这种情况下,x:Key 隐式设置为 {x:Ty ...

  5. 饮冰三年-人工智能-Python-20 Python线程、进程、线程

    进程:最小的数据单元 线程:最小的执行单元 一: 1:线程1 import threading #线程 import time def Music(): print("Listen Musi ...

  6. Wine中中文显示为错误的解决方案

    First u must download wqy-microhei.ttc font online (https://github.com/anthonyfok/fonts-wqy-microhei ...

  7. 【数据库】MySql分割字符串

    上论坛时看到一个骨骼清奇的分割字符串算法. DROP TABLE IF EXISTS Tmp_AreaCode; CREATE TABLE Tmp_AreaCode( string ) )ENGINE ...

  8. Barber paradox

    According to Wikipedia, the well known barber paradox states like this: The barber is the "one ...

  9. Cordova IOT Lesson002

    hello index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...

  10. React(v16.8.4)生命周期详解

    当前版本v16.8.4 装载过程(组件第一次在DOM树中渲染的过程): constructor(常用) -> getInitialState(v16.0已废弃) -> getDefault ...