Android基础整合项目之节日群发助手(三)
Android基础整合项目(一) 之节日群发助手part 3
——转载请注明出处:coder-pig
本节引言:
在前面两个章节中我们已经完成了群发助手的读联系人,存取数据库;使用
SimpleCursorAdapter绑定数据库与ListView;实现listview的全选与全不选;
也把需要拨打电话号码的id以list集合的形式通过Intent传送到了第三个界面
今天我们就来完成第三个界面的开发,工作如下:
1)完成第三个Activity的布局
2)解析第二个Activity通过Intent传送过来的List集合
3)读取数据表中的festival表中的节日祝福语,显示到界面上
4)完成切换祝福语的功能
5)完成发送统一祝福语的功能
6)完成发送不同祝福语的功能
7)使用具有列表和带确定按钮的AlertDialog
8)使用SmsManager完成短信的发送
正文:
1.完成第三个Activity的布局:
代码如下:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/LinearLayout1"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context="com.jay.example.festivalsmshelper.MainActivity" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <EditText
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:hint="亲爱的"
- android:id="@+id/editappellation"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="XXX,我是"
- />
- <EditText
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:hint="小猪"
- android:id="@+id/editme"
- />
- </LinearLayout>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="150dp"
- android:id="@+id/textwish"
- />
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="切换祝福语"
- android:id="@+id/btnchange"
- />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="发送不同祝福语"
- android:id="@+id/btnsendunlike"
- />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="发送统一祝福语"
- android:id="@+id/btnsendlike"
- />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="返回"
- android:id="@+id/btnback"
- />
- </LinearLayout>
- </LinearLayout>
2.解析第二个Activity传送过来的List集合:
直接用list存储即可,增强for循环可以去掉,只是用来确认传过来的集合是否有数据,
从而避免空指针问题的出现
- Intent it = getIntent();
- final List<Integer> list = it.getIntegerArrayListExtra("ids");
- int i = 1;
- //下面这个语句用于查看是否有传值过来,传了什么值,通常用log.?来跟踪错误
- for(Integer j:list)
- {
- System.out.println(j);
- }
3.读取数据库表中的festival表的祝福语并显示
简单的一条查询语句即可:
- sql = "select detail from festival where sentence_id = " + num+"";
- textwish.setText(getWish(sql));
另外因为我们的操作很多都要查询数据库,就直接写到一个方法中getWish()
- private String getWish(String sql)
- {
- String wish = null;
- GetContactsService gcs = new GetContactsService(ThridActivity.this);
- Cursor curosr =gcs.query(sql, null);
- curosr.moveToFirst();
- wish = curosr.getString(0);
- curosr.close();
- return wish;
- }
ps:num是一个整数1-10都可以,看数据库表的记录数决定的
4.完成祝福语的切换功能:
其实这里就是简单的改变上面那个num的数字而已,自增++
然后等于十的时候把num重置为1即可
- btnchange.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- if(num == 10)num = 1;
- else ++num;
- sql = "select detail from festival where sentence_id = " + num+"";
- textwish.setText(getWish(sql));
- }
- });
5)完成发送统一祝福语的功能:
就是给每个联系人发送相同的短信,这里的话,先读取传过来的集合获取id
然后根据id读取Contacts表中id对应的联系人名称,电话号码;
将这两个组合到一起,作为对话框的列表项的资源数组
还需要创建一个带列表的对话框,添加一个确定按钮
代码:
- btnsendlike.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- String ids = "";
- //将list集合中的数据取出来,结果可能是:7,8,9,这样的
- for(Integer j:list)
- {
- ids = ids + j + ",";
- }
- //去掉小尾巴","直接去掉最后一位即可
- ids = ids.substring(0, ids.length()-1);
- System.out.println(ids);
- //需要取出Contacts表中的联系人信息,用于等下对话框内容显示以及发送短信时
- sql = "select * from contacts where _id in("+ids+")";
- System.out.println(sql);
- List<Map<String,String>> lc = getContacts(sql);
- //取出集合中的元素放到字符串数据中
- //判断需创建的数组的长度
- int length = 0;
- for(Map<String,String> mp:lc)
- {
- length++;
- }
- final int lg = length;
- String name[] = new String[length];
- String number[] = new String[length];
- String show[] = new String[length];
- final String finumber[] = number;
- final String finame[] = name;
- int i = 0;
- for(Map<String,String> mp:lc)
- {
- name[i] = mp.get("name");
- number[i] = mp.get("number");
- Log.i("name[i]", name[i]);
- Log.i("number[i]", number[i]);
- i++;
- }
- for(int o = 0;o < i;o++)
- {
- show[o] = name[o] + ":" + number[o];
- Log.i("show[o]", show[o]);
- }
- //弹出确认的对话框:
- builder = new AlertDialog.Builder(ThridActivity.this);
- builder.setTitle("统一发送祝福语模式\n请确认发送人员:");
- builder.setIcon(R.drawable.ic_launcher);
- builder.setItems(show,null);
- builder.setPositiveButton("确定发送", new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- for(int p = 0;p < lg;p++)
- {
- String num = finumber[p];
- String wish = editappellation.getText().toString() + finame[p] + "我是"+
- editme.getText().toString() +
- textwish.getText().toString();
- sendMessage(num, wish);
- }
- }
- });
- alert = builder.create();
- alert.show();
- }
- });
6)创建发送短信的方法:
- private void sendMessage(String number,String message)
- {
- SmsManager.getDefault().sendTextMessage(number,
- null, message, null, null);
- Toast.makeText(getApplicationContext(), "发送成功", Toast.LENGTH_SHORT).show();
- //在模拟器环境中我们需要查看发出的短信内容或者真机调试时不想浪费短信钱
- //就使用log.i查看发出的短信内容即可
- Log.i("sendMessage", number+message);
- }
另外,使用上述方法发送短信,你的手机是不会保留发送的信息记录的;
其实就是后台发送短信!
7)好了,完成5,6步后程序基本成型了:
完成前面6步后,程序已经可以完成基本功能了:
效果如下:
接着查看我们的Logcat,可以看到发送的信息内容:
8)最后再完成随机祝福语部分
就是随机给不同的人发送不同内容的短信:
其实这里和上面那个部分是大同小异的,仅仅是修改发送短信时
的祝福语内容,使用随机数决定发送的祝福语而已,仅仅需要添加下述代码即可:
1)取出Festival表中的detail字段的所有记录,存储到字符串数组中
- //将所有的祝福语短信存储到字符串数组中
- String sql = "select detail from festival";
- String[] showmsg = new String[10];
- GetContactsService gcService = new GetContactsService(ThridActivity.this);
- Cursor curosr =gcService.query(sql, null);
- int s = 0;
- curosr.moveToFirst();
- while(curosr.moveToNext())
- {
- showmsg[s] = curosr.getString(0);
- s++;
- }
- final String[] fishowmsg = showmsg;
2)使用随机数,随机的取出祝福语
- for(int p = 0;p < lg;p++)
- {
- String num = finumber[p];
- //只需要修改输出时的祝福语内容即可
- int randow = (int) (Math.random() * 10);
- String wish = editappellation.getText().toString() + finame[p] + "我是"+
- editme.getText().toString() +
- fishowmsg[randow];
- sendMessage(num, wish);
- }
运行截图:
截至之当前的项目代码:
代码下载
知识点总结:
1)解析Intent中存储的list集合:
Intent it = getIntent();
final List<Integer> list = it.getIntegerArrayListExtra("ids");
2)SQLite数据库的相关操作,以及cursor的使用
切忌一点,使用cursor一定要调用cursor.moveToFirst()不然会报错哦!
另外可以调用moveToNext()可以使游标后移!可使用getXxx获取不同类型的数据
3)使用SmsManager.getDefault().sendTextMessage(number, null, message, null, null);
发送短信
4)生成1~10内的随机整数:int randow = (int) (Math.random() * 10);
好了,节日群发助手这个项目开发就到这里了,app仅仅是具有雏形,UI和代码都没有
优化,存在一定的冗余和bug,各位学员在自己编写的过程中可以自行的修改或者优化
本文的初衷是帮助各位初学者巩固相关的知识点的!后续会推出类似的知识点整合
项目,敬请关注,谢谢
当然有时间也会修改下这个app,正如大牛所说的,改下UI或许会是个好的app
Android基础整合项目之节日群发助手(三)相关推荐
- Android基础整合项目之节日群发助手(二)
Android基础整合项目(一) 之节日群发助手part 2 --转载请注明出处:coder-pig 本节引言: 在上一节中我们已经做出了我们群发助手的第一个界面以及完成了联系人的读取以及数据库的 录 ...
- Android Studio实现学生信息管理系统,基础入门项目
文章目录 一.需求分析 二.开发环境 三.详细设计 3.1 项目结构 3.2 数据库 3.3 登录和注册 3.4 增删改查 四.项目演示 五.项目源码 一.需求分析 该学生信息管理系统具有添加学生信息 ...
- Android基础——项目的文件结构(三)
Android基础--项目的文件结构(三) 代码源文件夹与资源文件夹 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目中,代码源文件夹有4个 ...
- Android基础知识【项目实训-实现二级导航“今日活动”及读取数据库】【5】
[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 ...
- 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第三章:简单控件
第 3 章 简单控件 本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图.容纳视图的常用布局.响应点击的按钮控件.显示图片的图像视图等.然后结合本章所学的知识,演示了一个实战项 ...
- 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第六章:数据存储
第 6 章 数据存储 本章介绍Android 4种存储方式的用法,包括共享参数SharedPreferences.数据库SQLite.存储卡文 件.App的全局内存,另外介绍Android重要组件-应 ...
- 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第五章:中级控件
第 5 章 中级控件 本章介绍App开发常见的几类中级控件的用法,主要包括:如何定制几种简单的图形.如何使用几种选择按钮.如何高效地输入文本.如何利用对话框获取交互信息等,然后结合本章所学的知识,演示 ...
- Android基础——项目的文件结构(二)
Android基础--项目的文件结构(二) AndroidManifest.xml文件分析 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目 ...
- 重学Android基础系列篇(五):Android虚拟机指令
前言 本系列文章主要是汇总了一下大佬们的技术文章,属于Android基础部分,作为一名合格的安卓开发工程师,咱们肯定要熟练掌握java和android,本期就来说说这些~ [非商业用途,如有侵权,请告 ...
- 手把手教你扩展个人微信号(2)(微信控制器、群发助手、好友删除检测)...
现在的日常生活已经离不开微信,本文将会抛砖引玉演示如何使用Python调用微信API做一些有意思的东西. 看完这一系列教程,你就能从头开始实现自己关于微信的想法. 本文为教程的第二部分,主要以微信控制 ...
最新文章
- 浅析Web工程目录和tomcat目录
- 关于mysql数据库中存放中文字段乱码问题解决方案
- ArcGIS桌面基本操作 和 ArcSDE数据库基本概念
- 【实用】CTS请求号传输报错处理
- UIAlertController的使用及其自定义
- linux如何停用xdmcp服务,如何禁用XDMCP服务
- java合并表的两行_如何通过SQL将不同数据库表中记录两行合并为一行
- Winform获取本地IP和外网IP
- 零基础如何自学Java?
- 振动噪声测试分析软件,DASP-V11工程版 振动噪声应变冲击
- python 邮件抄送是什么意思_python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)...
- 成长的路上每一步都需要自己去用心体会!
- 解决:outlook邮件内容过宽,打印不全
- l7sa008b故障代码_美国凯利冷机故障码表
- 【Hive】Hive练习题(二)
- unity 陀螺仪 物体旋转和移动效果
- 什么是CRM?2023年15家全球顶级CRM系统推荐
- centos安装JWM轻量桌面系统
- python雷达开发_用Python Matplotlib绘制雷达地图,Pythonmatplotlib
- kernel power domain分析
热门文章
- 优化jsj脚本,防止浏览器卡死
- openstack私有云搭建
- 计算机无法访问,您可能没有权限使用网络资源.请与这台服务器的管理员联系的解决办
- Excel 计算两个日期间相差的天数、月数或年数 DATEDIF函数
- PIXI 精灵表和精灵动画
- 学习c语言,踏上新征程
- Python sorted函数|sorted([13,1,237,89,100],key=lambda x:len(str(x)))
- 什么是锁?有几种锁?怎么用锁?
- java 生成pdf文件_Java 生成PDF文档的示例代码
- 泛微oa流程表单之明细表下拉框事件