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

posted on 2019-03-25 14:41  vonzc  阅读(227)  评论(0编辑  收藏  举报