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以 ...
随机推荐
- mysql 客户端连接报错Illegal mix of collations for operation
服务端用的是utf-8,客户端工具打开表和视图是会报Illegal mix of collations for operation错误,经排查,可以采用以下语句解决 SET character_set ...
- LMerge-github
ILMerge ILMerge是一个将多个.NET程序集合并到一个程序集中的实用程序.它可以免费使用,并以NuGet包的形式提供. 如果您在使用它时遇到任何问题,请与我们联系.(mbarnett at ...
- 服务器启动socket服务报错 java.net.BindException:Cannot assign requested address
错误信息: 2017-06-13 11:18:00,865 [GateServer.java:82][ERROR]:启动服务出错了java.net.BindException: Cannot ass ...
- 初始Mkaefile
初识MakefIle 在学习Linux过程中,我越发的觉得Linux系统给了使用者更大的自由,同时也就增加了学习的成本.在gcc下去调试代码,没有了熟悉的VS,没有的人性话的错误提示(当然Makefi ...
- Centos6.5升级openssh、OpenSSL和wget
1.OpenSSL 1.1.查看版本 使用如下命令查看版本: openssl version 1.2.安装gcc依赖 yum -y install gcc gcc-c++ 1.3.安装配置 ./con ...
- 英语口语练习系列-C36-城市-谈论活动-登高
词汇-城市 city your favorite city a place you would like to visit metropolis capital landscape enchantin ...
- Tornado-Ajax
介绍 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX是在不 ...
- __x__(30)0908第五天__导航条的练习 <div>版本
效果图: html源代码: <!doctype html> <html> <head> <meta charset="utf-8" /& ...
- (54)Wangdao.com第七天_JavaScript 运算符
JavaScript 运算符,也叫操作符 对一个或者多个值进行运算,都是会返回结果的. 比如: typeof 返回一个值的类型,返回值类型是字符串. 隐式类型转换: 任意值 = 任意值 + &q ...
- (89)Wangdao.com第二十二天_JavaScript 属性
属性 属性本身是一个对象(Attr 对象) Element.attributes 返回一个类似数组的动态对象,成员是该元素标签的所有属性节点对象 属性的实时变化都会反映在这个节点对象上. 其他类型的 ...