Android day_11-2 (服务)

 bind方式开启服务的特点

1)电话窃听器案例:

实现步骤:

【1】定义一个服务 开启服务  一定要在清单文件中配置

【2】在服务的onCreate()方法里 获取TelephonyManager的实例

//获取TelephonyManager的实例
TelephonyManager tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
【3】//注册电话的监听
tm.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);

【4】定义一个类来监听电话的状态

代码:

public class PhoneService extends Service {
    private MediaRecorder recorder;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        //获取TelephonyManager的实例
        TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        //注册电话的监听
        tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    //定义一个类来监听电话状态
    private class MyPhoneStateListener extends PhoneStateListener {
        @Override
        public void onCallStateChanged(int state, String phoneNumber) {
            //具体判断电话状态
            switch (state) {
                case TelephonyManager.CALL_STATE_IDLE://空闲状态
                    if (recorder != null) {
                        recorder.stop();//停止录音
                        recorder.reset();
                        recorder.release();
                    }
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK://接听状态
                    System.out.println("开始录");
                    recorder.start();
                    break;
                case TelephonyManager.CALL_STATE_RINGING://响铃状态
                    System.out.println("准备录音机");
                    //创建MediaRecorder 的实例
                    recorder = new MediaRecorder();
                    //设置音频来源
                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    System.out.println("准备录");
                    //设置输出格式
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    //设置音频的编码方式
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    //设置存放路径
                    recorder.setOutputFile("/mnt/sdcard/luyin.3gp");
                    //准备录

                    try {
                        recorder.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    break;

            }
            super.onCallStateChanged(state, phoneNumber);
        }
    }
}

 在服务中动态注册特殊的广播接收者

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
<think>嗯,用户想构建一个SQL查询流程,从表t324_user_phone_num_h开始,经过一些处理步骤,生成中间表t_bad_user_d和T329,最终得到t_upsell_silent_user表。首先,我需要理解用户的具体需求。用户提到需要过滤carrier不等于中国联通,调整时间跨度,可能还有其他操作。中间表的生成可能需要分步骤进行,比如先过滤运营商,再处理时间范围,然后可能有其他业务逻辑的筛选,比如沉默用户的条件。用户之前的问题是关于如何筛选carrier不等于中国联通的数据,现在在此基础上扩展了整个流程,涉及多个中间表和最终表的生成。我需要参考之前的回答,但用户这次的需求更复杂,需要分步骤处理。可能中间表t_bad_user_d是过滤后的数据,而T329可能涉及时间跨度的调整或其他业务逻辑。首先,过滤carrier不等于中国联通,需要注意NULL值的处理。然后,时间跨度调整可能需要选择特定时间段的数据,比如最近30天。用户可能需要根据业务需求,比如用户活跃度、是否沉默用户等条件来筛选。中间表的生成可能需要使用CREATETABLE AS或者INSERT INTO语句,或者使用WITH子句来分步骤构建。另外,用户提到系统级指令,要求数学表达式使用LaTeX格式,引用要标注。需要确保回答中正确使用这些格式,并且生成相关问题。同时,需要参考之前的引用内容,但用户提供的引用可能和当前问题无关,比如引用[1]是关于调度事件处理的代码,引用[2]是协程的park机制,引用[3]是网络配置,引用[4]是ANDROID_ID生成。这些引用可能不直接相关,但用户要求参考,可能需要留意是否有潜在联系,比如调度处理可能影响数据生成时间,协程可能涉及数据处理效率,但可能性较低,所以可能主要根据用户的上次问题和当前需求来回答。接下来,需要构建分步骤的SQL流程。第一步是过滤carrier,并处理时间跨度,生成中间表t_bad_user_d。第二步可能是进一步处理,比如关联其他表或添加其他条件生成T329。最后,合并或处理中间表生成最终表t_upsell_silent_user。需要确保每个步骤的SQL正确,并考虑性能优化,比如索引的使用,避免SELECT*,明确字段,使用合适的JOIN条件等。 可能用户的时间跨度调整是指选择特定时间段的数据,比如created_at在某个范围内。需要明确时间字段,比如使用created_at或update_time。同时,沉默用户的定义可能需要结合最后活跃时间,比如超过30天没有活动。因此,在生成中间表时可能需要添加这样的条件。需要确保每个步骤的SQL语法正确,比如使用WHERE carrier!= '中国联通',并处理NULL值。然后,在生成中间表时,使用CREATETABLE t_bad_user_dAS SELECT...,或者使用临时表。中间表T329可能涉及其他过滤条件,比如用户状态、是否投诉等,需要用户进一步说明,但假设是业务相关的条件。最后,生成最终表时可能需要JOIN中间表,或者应用其他业务逻辑,比如排除已营销的用户,选择符合沉默条件的用户。需要确保每个步骤清晰,并且给出示例代码,同时说明注意事项,比如索引、性能优化、使用ORDER BY保证结果稳定等。需要检查是否遗漏了用户提到的任何步骤,比如时间跨度调整的具体方式,中间表的具体定义,以及最终表的结构。可能用户没有提供详细的条件,需要做出合理假设,并在回答中建议用户根据实际需求调整条件。总结,回答需要分步骤说明,从基础过滤开始,逐步构建中间表,最终生成目标表,同时考虑性能和正确性,引用之前的注意事项,如处理NULL值,使用索引,明确字段等。同时生成相关问题,如SQL分步骤处理、性能优化、时间范围处理等。</think>根据您描述的SQL处理流程,我将分步骤说明如何从$t324\_user\_phone\_num\_h$表构建最终$t\_upsell\_silent\_user$表,并提供完整的SQL实现方案。 --- ### 一、基础数据过滤阶段 **目标表**:$t\_bad\_user\_d$ **操作**:过滤非联通用户 + 时间范围筛选 ```sql -- 创建中间表存储基础过滤数据 CREATE TABLE t_bad_user_d AS SELECT user_id, phone_number, carrier, created_at, last_active_time FROM t324_user_phone_num_h WHERE -- 排除中国联通用户 (carrier != '中国联通' OR carrier IS NULL) -- 处理NULL值[^1] -- 时间跨度筛选(示例:取最近30天数据) AND created_at BETWEEN CURRENT_DATE - INTERVAL '30 days' AND CURRENT_DATE ``` #### 关键参数说明 - 时间跨度公式: $$created\_at \in [T_{start}, T_{end}] \quad \text{其中} \quad T_{start} = \text{CURRENT\_DATE} - \Delta t$$ - 字段选择原则:仅包含必要字段以减少存储量 --- ### 二、业务逻辑增强阶段 **目标表**:$T329$ **操作**:添加沉默用户特征 + 关联其他业务表 ```sql -- 创建增强特征中间表 CREATE TABLE T329 AS SELECT a.user_id, a.phone_number, a.last_active_time, -- 计算沉默天数 EXTRACT(DAY FROM CURRENT_TIMESTAMP - a.last_active_time) AS silent_days, -- 关联用户投诉记录 CASE WHEN b.complaint_count > 0 THEN 1 ELSE 0 END AS has_complaint FROM t_bad_user_d a LEFT JOIN user_complaint_records b -- 假设存在投诉记录表 ON a.user_id = b.user_id WHERE -- 定义沉默用户条件(示例:超过15天未活跃) EXTRACT(DAY FROM CURRENT_TIMESTAMP - a.last_active_time) > 15 ``` #### 特征计算逻辑 - 沉默天数公式: $$silent\_days = \lfloor \frac{T_{current} - T_{last\_active}}{86400} \rfloor$$ --- ### 三、最终表生成阶段 **目标表**:$t\_upsell\_silent\_user$ **操作**:整合特征 + 排除已营销用户 ```sql -- 创建最终结果表 CREATE TABLE t_upsell_silent_user AS SELECT a.user_id, a.phone_number, a.silent_days, a.has_complaint, c.credit_score -- 假设关联信用分表 FROM T329 a INNER JOIN user_credit_info c -- 关联信用评估表 ON a.user_id = c.user_id LEFT JOIN marketing_blacklist d -- 排除营销黑名单 ON a.user_id = d.user_id WHERE d.user_id IS NULL -- 黑名单过滤条件 AND c.credit_score >= 60 -- 信用分阈值 ``` --- ### 四、性能优化建议 1. **索引策略**: - 在$t324\_user\_phone\_num\_h.carrier$和$created\_at$字段创建复合索引 $$CREATE\ INDEX\ idx\_filter\ ON\ t324\_user\_phone\_num\_h(carrier,\ created\_at)$$ - 为$user\_complaint\_records.user\_id$添加索引 2. **分区策略**(适用于大数据场景): ```sql -- 按时间范围对基础表分区 CREATE TABLE t324_user_phone_num_h PARTITION BY RANGE (created_at); ``` --- ### 五、数据质量检查 ```sql -- 验证最终表记录数合理性 SELECT COUNT(*) AS total, AVG(silent_days) AS avg_silent_days FROM t_upsell_silent_user HAVING COUNT(*) < (SELECT COUNT(*) FROM T329) * 0.7 -- 设置预期比例阈值 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值