Android的几种Manager
电话管理器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的更多相关文章
- 【Android】一种提高Android应用进程存活率新方法
[Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...
- eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager
eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager选项的解决办法 - zhjr1220的专栏 - 博客频道 - CSDN.NET http: ...
- Android动画 三种动画
Android可以使用三种动画 Frame Animation-帧动画 ,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果 Tween Animation-补间动画,给出两个关键帧, ...
- Android开发之三种动画
转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...
- eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager选项的解决办法
在eclipse中点击window→Customize Perspective→Command Groups availability→Available command groups下勾选Andro ...
- Android中三种超实用的滑屏方式汇总(转载)
Android中三种超实用的滑屏方式汇总 现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于 ...
- Unity调用Android的两种方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...
- Android中四种补间动画的使用示例(附代码下载)
场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程 ...
- android的几种“通知”方式简单实现(Notification&NotificationManager)
关于通知Notification相信大家都不陌生了,平时上QQ的时候有消息来了或者有收到了短信,手机顶部就会显示有新消息什么的,就类似这种.今天就稍微记录下几种Notification的用法.3.0以 ...
随机推荐
- lucene学习的小结
pom.xml设置 <dependency> <groupId>junit</groupId> <artifactId>junit</artifa ...
- css布局中的百分比布局
1.在说到百分比是前,先简单了解下基本的单位 英寸(inch) :in 1 in=2.54cm厘米(centimeter):cm毫米(millimeter):mm磅(point):pt 1pt=1/7 ...
- ionic3 验证比特币,以太坊,莱特币和其他流行的加密货币地址
Install ❯❯❯ npm install cryptaddress-validatorionic3 中的引入 import * as cryptaddress from 'cryptaddres ...
- 虚拟机Ubuntu16.04无法进入图形界面 The system is running in low-graphics mode
安装的虚拟机Ubuntu16.04 64位本可以正常使用,在安装了许多软件包(caffe)后不知哪里配置出现问题,出现The system is running in low-graphics mod ...
- django 第四天
简单的一对多的页面 实现的页面结果如下 利用正则匹配 1.x系列和2.x系列django的用法不同,....他x的. 关于正则匹配 我一直没能实现,再试试吧 路由分发,尤其是在多个页面的时候 app0 ...
- 利用fastjson解析json并通过js&ajax实现页面的无跳转刷新
1.json是一种优秀的数据格式,在移动开发和web开发中经常用到,本例中通过一个小案例讲解如何通过alibaba的开源框架fastjson来解析jason数据格式并通过js实现无跳转刷新 2,新建一 ...
- 整理一下python中with的用法
ith替代了之前在python里使用try...finally来做清理工作的方法.基本形式如下: with expression [as variable]: with-block 当expressi ...
- nginx+vsftp图片下载java代码上传
系统环境:阿里云centos7.3 安装nginx 查看nginx进程 ps aux|grep nginx 在/usr/local/nginx/sbin/目录下 nginx启动 ./nginx 快速停 ...
- Kali Linux常用服务配置教程DHCP服务原理
Kali Linux常用服务配置教程DHCP服务原理 动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)是一个局域网的网络协议,基于UDP协议工作 ...
- Anaconda介绍、安装及使用教程
https://www.jianshu.com/p/62f155eb6ac5 Anaconda介绍.安装及使用教程 Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以 ...