关闭

【Android基础】四、四大组件(二)

78人阅读 评论(0) 收藏 举报
分类:

3.Service
Service
AIDL
Service两种启动方式:
1)startService():onCreate方法只调用一次,每次开启服务都会回调onStart方法,开启服务的进程被杀死后会自动重新启动,手动杀死不会重新启动。
2)bindService():onCreate,onBind,onUnbind,onDestroy只调用一次,只能绑定一次,绑定后只能解绑一次,可以通过定义的接口调用Service中的方法,绑定的Activity销毁,则Service关闭,可以通过混合开启Serivce使服务运行于后台。
AIDL接口用于远程服务的访问,需要在相同的包下面,是通过隐式启动来启动。
电话录音机:
监听电话状态要用TelephonyManager对象, 是一种系统服务,监听的事件是电话响铃状态,PhoneStateListener是一个类而非接口。录音使用的是MediaRecoder对象

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
tm.listen(new listener(),PhoneStateListener.LISTEN_CALL_STATE);
class listener extends PhoneStateListener{  
        @Override  
        public void onCallStateChanged(int state, String incomingNumber) {  
            super.onCallStateChanged(state, incomingNumber);  
            switch (state){  
                case TelephonyManager.CALL_STATE_IDLE:  
                    System.out.println("空闲");  
                    if(recorder != null){  
                    //录音停止
                        recorder.stop();  
                        //释放资源
                        recorder.release();  
                        recorder = null;  
                    }  
                    break;  
                case TelephonyManager.CALL_STATE_RINGING:  
                    System.out.println("响铃");  
                    if(recorder == null){  
                        recorder = new MediaRecorder();  
//设置录音源来自麦克风                        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
//设置录音输出格式为3gp                      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
//设置录音输出文件 
recorder.setOutputFile(getFilesDir() + "/" + "luyin.3gp");  
//设置录音编码类型                        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
                       try{  
                       //录音准备
                            recorder.prepare();  
                        }catch (Exception e){  
                            e.printStackTrace();  
                        }  
                    }  
                    break;  
                case TelephonyManager.CALL_STATE_OFFHOOK:  
                    System.out.println("摘机");  
                    if(recorder != null){  
                    //开始录音
                        recorder.start();  
                    }  
                    break;  
            }  
        }  
    }  
}  

四、ContentProvider
ContentProvider
一般很少需要自定义ContentProvider,自定义ContentProvider的话,需要重写query,insert,update,delete等方法,分别返回Cursor,Uri,int类型的数据,这些方法在访问时通过ContentResolver对象调用,需要传入的参数包括Uri和相应方法所需要的参数,这个Uri标识了提供数据的ContentProvider,这个Uri是在清单文件中配置的android:authorities属性,Uri后面可以跟path,通过匹配Uri,用来区分对不同的数据表的操作,在修改过表的数据后,还要通过getContext().getContentResolver().notifyChange(uri,null);这样才能使ContentObserver观察到数据的变化。
访问ContentProvider通过ContentResolver调用相应方法,
使用ContentResolver为指定Uri注册一个ContentObserver派生类:getContentResolver.registerContentObserver(uri,notifyForDescendents,ContentObserver)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6748次
    • 积分:537
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条