java群发上万条短信解决方案,请各位xdjm赐教,给分不是问题,万分感谢

zzlglgogo124 2011-02-12 12:57:27
最近公司有一个短信群发的问题,api是第三方提供商,我们只是开发web层,碰到一个题,群发500,600条不是万问题,上千到上万就发不出去,下面有个方法,
请教一下csdn的xdjm们,牛人们,看商量有什么解决。。。非常感谢,给多少分没问题!
出错日志:
java.lang.Exception: SMS Message Model is incomplete. Can not initialize object.
at sms.util.SMSMessagesModel.<init>(SMSMessagesModel.java:25)
at com.oas.service.impl.SMSGroupServiceImpl.sendGroupMessage(SMSGroupServiceImpl.java:48)
at com.oas.service.impl.SMSGroupServiceImpl.initializeSendingSMS(SMSGroupServiceImpl.java:194)

主要发送短信方法:

public String sendGroupMessage(String searchType, Timestamp startDate, Timestamp endDate,
String[] priorityLevel, String[] customerLevel, String smsType, String message) throws CrownOASException {
try {
List<SMSMessagesModel> smsMessagesModels = new ArrayList<SMSMessagesModel>();

List<SMSPartialModel> smsPartialModels = smsDao.getListOfRecipients(searchType, startDate, endDate, priorityLevel, customerLevel, smsType);

for(SMSPartialModel smsPartialModel : smsPartialModels) {
SMSMessagesModel smsMessageModel = new SMSMessagesModel (Constants.PRODUCT_CODE,smsPartialModel.getLoginname(),smsPartialModel.getPhone(),smsPartialModel.getPermission(),smsType,message,"");
smsMessagesModels.add(smsMessageModel);
}

SMSSender sms = new SMSSender(Constants.SMS_URL);
List<SMSMessagesModel> k = sms.sendByBatchWithTimeDelay(smsMessagesModels, 10, 5000, Constants.GB);

if(k != null){
for(SMSMessagesModel j : k) {
System.out.println("Output Log: " + j.getPhone() + " | " + j.getResponseCode());
}
}
} catch (Exception e) {
e.printStackTrace();
}

return "success";
}


我想是不是SMSMessagesModel smsMessageModel = new SMSMessagesModel ()这个发送短信对象有问题,如果有上千条new就不行,不知道各位大侠有什么好的解决方案,谢谢!
...全文
908 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzlglgogo124 2011-02-18
  • 打赏
  • 举报
回复
有一个星级组客户是5,6千,不是5,6千万。。。
zzlglgogo124 2011-02-18
  • 打赏
  • 举报
回复
我做了如下修改,每批发送500条,有一个星级组客户有5-6千万,有一个星级客户有900条反而发不出,有一个有一万多也发出,用的同一道代码,不知道为什么。。。各位CSDN的XDJM们帮忙一下,万分感谢!
错误日志还是以前一样?
-Hibernate: SELECT C.LOGINNAME loginname, C.PHONE phone, 'Y' permission FROM customers C LEFT JOIN smssubscription S ON C.LOGINNAME = S.LOGINNAME WHERE C.PHONE IS NOT NULL AND (UPPER(S.regards) != 'N' OR S.regards IS NULL) AND C.level IN (?)
java.lang.Exception: SMS Message Model is incomplete. Can not initialize object.
at sms.util.SMSMessagesModel.<init>(SMSMessagesModel.java:25)
at com.oas.service.impl.SMSGroupServiceImpl.sendGroupMessage(SMSGroupServiceImpl.java:58)
at com.oas.service.impl.SMSGroupServiceImpl.initializeSendingSMS(SMSGroupServiceImpl.java:253)
public String sendGroupMessage(String searchType, Timestamp startDate, Timestamp endDate,
String[] priorityLevel, String[] customerLevel, String smsType, String message) throws CrownOASException {
try {
List<SMSMessagesModel> smsMessagesModels = new ArrayList<SMSMessagesModel>();

//ASSUMPTION: no loginnames provided from the user
List<SMSPartialModel> smsPartialModels = smsDao.getListOfRecipients(searchType, startDate, endDate, priorityLevel, customerLevel, smsType);

int total=smsPartialModels.size();
int num=total/Constants.SMS_GROUP_SIZE;
int count=0;
int smscount=0;
for(SMSPartialModel smsPartialModel : smsPartialModels) {
smscount++;
if(total>=Constants.SMS_GROUP_SIZE){
SMSMessagesModel smsMessageModel = new SMSMessagesModel(Constants.PRODUCT_CODE,
smsPartialModel.getLoginname(),
smsPartialModel.getPhone(),
smsPartialModel.getPermission(),
smsType,
message,
"");
count++;
smsMessagesModels.add(smsMessageModel);
if(count==Constants.SMS_GROUP_SIZE){
count=0;
sendSMS500(smsMessagesModels);
smsMessagesModels.clear();
}else if(total-smscount<Constants.SMS_GROUP_SIZE&&smscount==total){
sendSMS500(smsMessagesModels);
smsMessagesModels.clear();
}
}else{

SMSMessagesModel smsMessageModel = new SMSMessagesModel(Constants.PRODUCT_CODE,
smsPartialModel.getLoginname(),
smsPartialModel.getPhone(),
smsPartialModel.getPermission(),
smsType,
message,
"");
count++;
smsMessagesModels.add(smsMessageModel);
if(count==total){
sendSMS500(smsMessagesModels);
smsMessagesModels.clear();
}


}

}


/*SMSSender sms = new SMSSender(Constants.SMS_URL);
List<SMSMessagesModel> k = sms.sendByBatchWithTimeDelay(smsMessagesModels, 10, 5000, Constants.GB);

if(k != null){
for(SMSMessagesModel j : k) {
System.out.println("Output Log: " + j.getPhone() + " | " + j.getResponseCode());
}
}*/

} catch (Exception e) {
e.printStackTrace();
}

return "success";
}

public void sendSMS500(List smsMessagesModels){
SMSSender sms;
try {
sms = new SMSSender(Constants.SMS_URL);
List<SMSMessagesModel> k = sms.sendByBatchWithTimeDelay(smsMessagesModels, 10, 5000, Constants.GB);

if(k != null){
for(SMSMessagesModel j : k) {
System.out.println("Output Log: " + j.getPhone() + " | " + j.getResponseCode());
}
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
wshcdr 2011-02-18
  • 打赏
  • 举报
回复
分批分送
hown 2011-02-18
  • 打赏
  • 举报
回复
想当年。我去面试的时候也是面临这个问题。
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 xihuanni0509 的回复:]
引用 19 楼 zzlglgogo124 的回复:
17楼说得正是,是选择了一个类型。正是这种情况(则首先要决断要发送多少个用户。如果用户数据太大,则把所有的用户查出来放到集合里把集合进行拆分分组发送。)
用多线程处理效率更高(一组一个线程,看情况来定)。这个情况怎么处理,我那个方法有什么改进,请各位牛人指导一下,谢谢!

支持
[/Quote]

这个比较好!
li463968565 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 dada_fangfang 的回复:]
虽然26楼的代码,已经比原先的好了很多,但是还是存在浪费内存的情况。

首先,你一次性取出所有的短信记录放在内存,再对内存进行分批操作,如果你的短信数据量很大,你能保证你的内存不爆掉吗,即使不爆掉,内存的速度也慢上好几倍。

其次,为什么不写一个线程类,你可以通过构造函数,传入你的短信发送条件,线程的run方法增加一个执行标识,例如线程的run根据你传入的条件,修改执行标识(线程启动),每……
[/Quote]

学习了,最近在自学线程,都是写些简单的,有什么好的例子?给个思路,万分感谢~~
dada_fangfang 2011-02-18
  • 打赏
  • 举报
回复
虽然26楼的代码,已经比原先的好了很多,但是还是存在浪费内存的情况。

首先,你一次性取出所有的短信记录放在内存,再对内存进行分批操作,如果你的短信数据量很大,你能保证你的内存不爆掉吗,即使不爆掉,内存的速度也慢上好几倍。

其次,为什么不写一个线程类,你可以通过构造函数,传入你的短信发送条件,线程的run方法增加一个执行标识,例如线程的run根据你传入的条件,修改执行标识(线程启动),每次读取300,发完后继续读,整个批次的短信发完后,通过设置执行标识退出线程(线程停止)。
这样不是很清晰吗?

不要问别人要代码!我们只能提供思路。不写代码的程序员。有什么用?
xihuanni0509 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zzlglgogo124 的回复:]
17楼说得正是,是选择了一个类型。正是这种情况(则首先要决断要发送多少个用户。如果用户数据太大,则把所有的用户查出来放到集合里把集合进行拆分分组发送。)
用多线程处理效率更高(一组一个线程,看情况来定)。这个情况怎么处理,我那个方法有什么改进,请各位牛人指导一下,谢谢!
[/Quote]
支持
hanmiit 2011-02-16
  • 打赏
  • 举报
回复
看来还是要分批发
liuyuhua0066 2011-02-16
  • 打赏
  • 举报
回复
你一次发500条,中间线程休息片刻,再重复执行发送。
Allan01 2011-02-16
  • 打赏
  • 举报
回复
can you try to modify like this: (refer to Prototype pattern)

for(SMSPartialModel smsPartialModel : smsPartialModels) {
SMSMessagesModel smsMessageModel = new SMSMessagesModel (Constants.PRODUCT_CODE,smsPartialModel.getLoginname(),smsPartialModel.getPhone(),smsPartialModel.getPermission(),smsType,message,"");
smsMessagesModels.add(smsMessageModel);
}

--->

SMSMessagesModel sModel = new SMSMessagesModel();
for(SMSPartialModel smsPartialModel : smsPartialModels) {
SMSMessagesModel smsMessageModel = (SMSMessagesModel)sModel.colone();
// set all parameters through setters, rather than creating from constructor.
smsMessageModel.setXXX();
smsMessageModel.setYYY();
//.....

smsMessagesModels.add(smsMessageModel);
}
mopishv0 2011-02-15
  • 打赏
  • 举报
回复
WEB前端收集请求 把请求都存到数据库
然后写个线程 取数据库数据 发送短信 每次发几百条
如果前端需要发送进度 用AJAX做个进度条就行了
zzlglgogo124 2011-02-15
  • 打赏
  • 举报
回复
17楼说得正是,是选择了一个类型。正是这种情况(则首先要决断要发送多少个用户。如果用户数据太大,则把所有的用户查出来放到集合里把集合进行拆分分组发送。)
用多线程处理效率更高(一组一个线程,看情况来定)。这个情况怎么处理,我那个方法有什么改进,请各位牛人指导一下,谢谢!
lebut2012 2011-02-14
  • 打赏
  • 举报
回复
public String sendGroupMessage(String searchType, Timestamp startDate, Timestamp endDate,
String[] priorityLevel, String[] customerLevel, String smsType, String message) throws CrownOASException {
try {
List<SMSMessagesModel> smsMessagesModels = new ArrayList<SMSMessagesModel>();

List<SMSPartialModel> smsPartialModels = smsDao.getListOfRecipients(searchType, startDate, endDate, priorityLevel, customerLevel, smsType);

for(SMSPartialModel smsPartialModel : smsPartialModels) {
SMSMessagesModel smsMessageModel = new SMSMessagesModel (Constants.PRODUCT_CODE,smsPartialModel.getLoginname(),smsPartialModel.getPhone(),smsPartialModel.getPermission(),smsType,message,"");
smsMessagesModels.add(smsMessageModel);
}

SMSSender sms = new SMSSender(Constants.SMS_URL);
List<SMSMessagesModel> k = sms.sendByBatchWithTimeDelay(smsMessagesModels, 10, 5000, Constants.GB);

if(k != null){
for(SMSMessagesModel j : k) {
System.out.println("Output Log: " + j.getPhone() + " | " + j.getResponseCode());
}
}
} catch (Exception e) {
e.printStackTrace();
}

return "success";
}

暗然的白天 2011-02-14
  • 打赏
  • 举报
回复
额、曾经做过一个一次发送上万封邮件的。你只是调用的是短信服务平台的接口,按照它的接口规范传数据,发短信还是短信平台的事,所以
首先你要弄明白发送短信的服务器有几个、怎么发的。如果有多台服务器的话是不是一个链接过去它会自动识别哪台闲置而自动链接哪台。这样的话你大量的短信可以分几次链接比较好。一次链接发多少条短信。不要把上万条短信用一个链接到一台短信服务器上处理。因为大量的短信在短信服务器上也需要排队。效率不高。
你还要知道创建一个发送短信的对象可以发送几条短信。难道一个发送对象只能发送一个?如果不是一个则取多少个合适?
如果客户选择了一个类型。则首先要决断要发送多少个用户。如果用户数据太大,则把所有的用户查出来放到集合里把集合进行拆分分组发送。可以一组创建一个链接,一个发送对象发送十个(这些看情况自己来定)。
用多线程处理效率更高(一组一个线程,看情况来定)。
你也可以问问短信平台那边有没有群发接口,如果有最多一次支持多少个用户,可以综合上面所说的调用群发接口来实现更好。如果没有或者不能调用的话也就算了。
说了这么多不知道对你有用没有,批量处理确实不太好弄。有了更好,没有的话也对不住了。祝你好运呀~
四川民工甲 2011-02-14
  • 打赏
  • 举报
回复
生产:
每次读取一定数量的SMSMessagesModel ,即一个批次。
消费:
发送一个批次的短信
greatmind829 2011-02-12
  • 打赏
  • 举报
回复
后台用线程来控制发送的数量。
zzlglgogo124 2011-02-12
  • 打赏
  • 举报
回复
怎么分批发送?
zzlglgogo124 2011-02-12
  • 打赏
  • 举报
回复
假设我有10000个1星级客户,在前台点选这个一星级,点击发送短信,每次发送600条怎么发送?
zzlglgogo124 2011-02-12
  • 打赏
  • 举报
回复
除了数据库之外,如果全部取出来之后,在发送这端在程序这端怎么控制分批发送?
加载更多回复(11)
Google Android SDK开发范例大全(完整版)共4个卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent
Google Android SDK开发范例大全(完整版)共4个卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 图文可视化提醒——Toast与LinearLayoutView 5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理器——自定义Adapter对象 5.12 还原手机默认桌面——重写clearWallpaper方法 5.13 置换手机背景图——Gallery与setWallpaper整合实现 5.14 撷取手机现存桌面——getWallpaper与setImageDrawable 5.15 文件资源管理器再进化——JavaI/O修改文件名及删除 5.16 取得目前File与Cache的路径——getCacheDir与getFilesDir 5.17 打开/关闭WiFi服务——WifiManager状态判断 5.18 取得SIM卡内的信息——TelephonyManager的应用 5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理 5.24 取得电信网络与手机相关信息——TelephonyManager与android.provider.Settings.System的应用 第6章 手机自动服务纪实 6.1 您有一条短信popup提醒——常驻BroadcastReceiver的应用 6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送email通知——BroadcastReceiver与Intent整合 6.6 手机拨接状态——PhoneStateListener之onCallStateChanged 6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定时间置换桌面背景——多AlarmManager事件处理 6.14 判断发送短信后的状态——BroadcastReceiver聆听PendingIntent 6.15 后台服务送出广播信息——sendBroadcast与BroadcastReceiver 6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得手机内置媒体里的图文件——ACTION_GET_CONTENT取回InputStream 7.7 相片导航向导与设置背景桌面——ImageSwitcher与Gallery 7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器——MediaPlayer与实现SurfaceView 7.15 相机预览及拍照临时文件——Camera及PictureCallback事件 第8章 当Android与Internet接轨 8.1 HTTPGET/POST传递参数——HTTP连接示范 8.2 在程序里浏览网页——WebView.loadUrl 8.3 嵌入HTML标记的程序——WebView.loadData 8.4 设计前往打开网页功能——Intent与Uri.parse 8.5 将网络图像网址放入Gallery中显示——URL.URLConnection.BaseAdapter 8.6 即时访问网络图文件展示——HttpURLConnection 8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 远程下载桌面背景图案——URLConnection与setWallpaper()搭配 8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——GoogleChartAPI 9.4 以经纬度查找目的地位置——GeoPoint与MapView的搭配运用 9.5 GPSGoogle地图——LocationListener与MapView实时更新 9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 手机手电筒——PowerManager控制WakeLock并改变手机亮度 10.2 GPS轨迹记录器——利用LocationListener在地图上画图并换算距离 10.3 女性贴身看护——AlarmManager.DatePicker.TimePicker 10.4 手机QRCode二维条形码生成器——Canvas与SurfaceHolder绘图 10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧