Android基础_广播(八)

发送广播

        Intent intent = new Intent("com.example.action.send");
        sendBroadcast(intent);

接收广播

/*action不需要配置catalogy*/
public class MusicReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("meeeeeee", "播放音乐");
    }

}

配置,不需要category
        <receiver android:name="com.example.MusicReceiver">
            <intent-filter >
                <action android:name="com.example.action.send"/>
            </intent-filter>
        </receiver>

发送有序广播

    /*顺序广播
     * 1.       
     * sendOrderedBroadcast(intent, 
                receiverPermission, 权限
                resultReceiver, 
                scheduler, 处理resultreceiver的信息
                initialCode, 发送广播的时候 对广播做了一个编号
                initialData, 广播的标题
                initialExtras Bundle数据的整体
                )
        2.在广播接收者中
        getresultdata()==上面的initialdata
        3.在接收者中的intent-filter中
            privity="888"优先级越大优先级越高
        4.在接收者中优先级高的可以修改数据
            setresultdata
        5.罢工
            abortBroadcast();           
     * */
    public void send(View v){
        Intent intent = new Intent("com.example.receiver03.action.PASSGAME");
        sendOrderedBroadcast(intent, 
                null, 
                null, 
                null, 
                0, 
                "hh", 
                null);
    }

在配置文件中设置优先级
        <receiver android:name="com.example.q134.PlayerReceiver">
            <intent-filter android:priority="111">//-1000至1000
                <action android:name="com.example.receiver03.action.PASSGAME"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.example.q134.PlayerReceiverB">
            <intent-filter android:priority="555">

                <action android:name="com.example.receiver03.action.PASSGAME"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.example.q134.PlayerReceiverC">
            <intent-filter android:priority="888">
                <action android:name="com.example.receiver03.action.PASSGAME"/>
            </intent-filter>
        </receiver>

服务

电话窃听(4.4版本以上无效)
public class PhoneService extends Service {
    /*1.时刻监听电话的状态
     *      来电 接通 挂断
     *      需要使用系统的 服务
     * 2.使用系统服务的方法
     *  TelephonyManager  = (TelephonyManager)getSystemService(String name);//Content.gtSystemService()
     * 3.监听的事件类型
     *  manager.listen(listener, events);
     *      1.new PhoneStateListener(
     *          oncallstatechanged
     *      )
     *      2.
     * 4.查看父类方法是否可以删除的方法,点进去看看有没有实现
     * **/
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
//      super.onCreate();
        Log.v("meeeeeee", "开启服务");
        TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        manager.listen(new PhoneStateListener(){
            String Pnumber = "";
            boolean isCalling =false;
            private MediaRecorder mMediaRecorder;
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                case TelephonyManager.CALL_STATE_IDLE://挂断
                    Log.v("meeeeeee", "待机状态");
                    if (isCalling) {
                        mMediaRecorder.stop();
                        mMediaRecorder.release();
                        mMediaRecorder=null;
                        isCalling=false;
                    }
                    break;
                case TelephonyManager.CALL_STATE_RINGING://来电
                    if(isCalling){
                    /**录音
                     * 1.创建实例
                     * 2.音源是麦克风
                     *      VOICE_DOWNLINK对方的声音
                     * 3.设置音频保存格式
                     * 4.指定保存位置
                     * 5.设置音频解码格式
                     * 6.设置音频编码
                     * */
                        try {
                            if (mMediaRecorder == null) {
                                mMediaRecorder = new MediaRecorder();
                                mMediaRecorder
                                        .setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK);
                                mMediaRecorder
                                        .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                                mMediaRecorder.setOutputFile(new File(
                                        getFilesDir(), "a.3gp")
                                        .getAbsolutePath());
                            }
                            mMediaRecorder
                            .setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                            mMediaRecorder.prepare();
                        } catch (Exception e) {
                        }
                    }
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:// 接通
                    isCalling = true;
                    break;
                //
                }
            }
        }, PhoneStateListener.LISTEN_CALL_STATE);
    }
}

给上权限
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
            <service android:name="com.example.spythephone.PhoneService" >
        </service>

服务的生命周期

startService(intent);
oncreate
onCommandStart
ondestroy

bindService(intent);
oncreate
onBind
onUnbind
onDestroy

AIDL

远程调用服务的Demo
服务端:
public class AlipayService extends Service {
    /*服务的共享:
     * 1.将远程程序的Iservice的文件的后缀从java改成aidl
     * 2.刷新eclipse把Iservice文件中所有的public 删除
     * 3.将service中实现Iservice对象改成继承Iservice.stub
     * 4.在本地服务中创建一个Iserivce同名的包,并将Iservice拷贝进去
     * */
    private class Alipayer extends IAlipay.Stub {
        @Override
        public int callPay(String name, String pwd, String paypwd,
                long currentTimeMiles, double money) {
            return pay(name, pwd, paypwd,
                    currentTimeMiles, money);
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return new Alipayer();
    }

    public int pay(String name, String pwd, String paypwd,
            long currentTimeMiles, double money) {
        if (!name.equals("zhangsan") || !pwd.equals("123")
                || !paypwd.equals("123")) {
            return 606;
        }
        if (money > 600) {
            return 404;
        }
        return 200;
    }
}

客户端:
将aidl文件复制到和服务端同名的包下
    public void buy(View v){
        Intent service=new Intent("com.example.alipay.START_ALIPAY");
        ServiceConnection conn = new ServiceConnection() {

            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
//              IAlipay agent = (IAlipay)service;
                IAlipay agent = IAlipay.Stub.asInterface(service);
                try {
                    int code = agent.callPay("zhangsan", "123", "123", System.currentTimeMillis(), 1200);
                    handlecode(code);
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            @Override
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub

            }           
        };
        bindService(service, conn, BIND_AUTO_CREATE);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值