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()实现手机的振动,括号里的参数是振动的时间。