zoukankan      html  css  js  c++  java
  • 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()实现手机的振动,括号里的参数是振动的时间。

  • 相关阅读:
    默哀STAND SILENTLY!
    用虚拟机优化Windows(update:2008.4.24)
    UE的心情指数?
    God of War III 的发售日期?
    2009/8/15应该是一个愉快的夜晚.为林肯公园中国10月演唱会做好准备
    北京2008奥运会完美谢幕!
    《The Pursuit of Happyness / 当幸福来敲门》(2006)
    2007林肯公园上海演唱会观后感(实况像片/MP3) update:2008.1.31
    2008早上好
    Active Object C++智能指针实现
  • 原文地址:https://www.cnblogs.com/vonzc/p/10593653.html
Copyright © 2011-2022 走看看