鱼C论坛

 找回密码
 立即注册
查看: 2684|回复: 3

[原创]android四大组件之activity-简单的短信发送程序

[复制链接]
发表于 2014-11-5 22:58:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 青玄 于 2014-11-5 23:03 编辑

源码概述:*******************************************布局文件与配置文件**************************************************************
1.布局文件:(1)activity_contacts.xml:用来显示取消和确定的;(2)activity_main.xml:用来显示短信界面的
                     (3)ui_phone_view.xml:用来显示联系人信息的;(4)contacts_items.xml:这个事显示自定义组件的
2.AndroidMainfest.xml文件的配置:
                      (1)权限的配置:            
  1. <uses-permission android:name="android.permission.SEND_SMS"/>
  2.     <uses-permission android:name="android.permission.READ_SMS"/>
  3.     <uses-permission android:name="android.permission.WRITE_SMS"/>
  4.     <uses-permission android:name="android.permission.READ_CONTACTS"/>
  5.     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
复制代码
                       (2)activity的配置:
  1. <activity android:name="com.cbd.sendsms.SelectContactsActivity" android:label="选择联系人"></activity>
复制代码
3.创建自定义组件时values文件夹所需要的配置文件declare.xml:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.     <declare-styleable name="phone_view">
  4.           <attr name="name" format="string" />
  5.           <attr name="phone" format="string" />
  6.      </declare-styleable>
  7. </resources>
复制代码
***********************************************src里面的代码概述以及知识概述**************************************************
1.自定义控件:
自定义控件实质上就是继承view类或者view类的子类所实现的一些功能而已!用它我们可以编写自己所需要的控件,就拿本案例
来说:这个类继承了RelativeLayout然后在构造方法里面实现自定义控件的操作:
           首先我们需要获取局部填充器然后调用inflate方法将布局文件转化为一个view对象,然后将view里面的值赋给本类中的tv_name,
    tv_phone,然后取得配置文件中的属性值,将它设置到本类中的成员里面去。其实自定义控件说白了,就是在子类里面定义一些控件的类,
然后将其她的布局文件转化成view类,再将这个view所包含的属性赋给本类中的成员而已!一下是自定义控件的主要代码:
  1. package com.cbd.sendsms.ui;

  2. import com.cbd.sendsms.R;
  3. import android.content.Context;
  4. import android.content.res.TypedArray;
  5. import android.util.AttributeSet;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.widget.CheckBox;
  9. import android.widget.RelativeLayout;
  10. import android.widget.TextView;

  11. public class PhoneView extends RelativeLayout {

  12.         private TextView tv_name;
  13.         private TextView tv_phone;
  14.         private CheckBox checkBox;

  15.         public PhoneView(Context context, AttributeSet attrs) {
  16.                 super(context, attrs);

  17.                 // 获取局部填充器把ui_phone_view.xml文件中的各种控件对象找到并赋给本类中的tv_name,tv_phone,cb
  18.                 LayoutInflater layoutInflater = (LayoutInflater) context
  19.                                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  20.                 View view = layoutInflater.inflate(R.layout.ui_phone_view, this);
  21.                 tv_name = (TextView) view.findViewById(R.id.tv_ui_phone_name);
  22.                 tv_phone = (TextView) view.findViewById(R.id.tv_ui_phone_content);
  23.                 checkBox = (CheckBox) view.findViewById(R.id.cb_ui_phoneview_status);
  24.                 // 取得清单文件中的属性值
  25.                 TypedArray typeArray = context.obtainStyledAttributes(attrs,
  26.                                 R.styleable.phone_view);
  27.                 // 取得清单文件中的属性值
  28.                 String name = typeArray.getString(R.styleable.phone_view_name);
  29.                 String phone = typeArray.getString(R.styleable.phone_view_phone);
  30.                 tv_name.setText(name);
  31.                 tv_phone.setText(phone);
  32.                
  33.         }
  34.         
  35.         public void setName(String name)
  36.         {
  37.                 tv_name.setText(name);
  38.         }
  39.         
  40.         public void setPhone(String phone)
  41.         {
  42.                 tv_phone.setText(phone);
  43.         }
  44.         
  45.         public boolean isChecked()
  46.         {
  47.                 return checkBox.isChecked();
  48.         }
  49.         
  50.         public void setCheckBox(boolean isChecked)
  51.         {
  52.                 checkBox.setChecked(isChecked);
  53.         }

  54.         
  55. }












复制代码
2.发送短信的方法:
  1. public void send(View v)
  2.         {
  3.                 if(selectedFlag==0   //这个标志的意思是说,如果是用户自己输入的话,那就执行这个if
  4.                 {
  5.                         String mobileNumber=mobile.getText().toString().trim();
  6.                         String contents=content.getText().toString().trim();
  7.                         if(!TextUtils.isEmpty(mobileNumber) && !TextUtils.isEmpty(contents))
  8.                         {
  9.                                 ContentValues values=new ContentValues();
  10.                                 values.put("address",mobileNumber);
  11.                                 values.put("type",2);
  12.                                 SmsManager smsManager=SmsManager.getDefault();
  13.                                 List<String> listSms=smsManager.divideMessage(contents);
  14.                                 for(String s : listSms)
  15.                                 {
  16.                                         smsManager.sendTextMessage(mobileNumber, null, s, null, null);
  17.                                         values.put("body",s);
  18.                                         values.put("date", new Date().getTime());
  19.                                         resolver.insert(uri, values);
  20.                                 }
  21.                                 values=null;
  22.                                 mobile.setText("");
  23.                                 content.setText("");
  24.                                 Toast.makeText(this, "信息发送成功!", Toast.LENGTH_SHORT).show();
  25.                         }else{
  26.                                 Toast.makeText(this, "电话号码或信息内容不能为空!", Toast.LENGTH_SHORT).show();
  27.                         }
  28.                 }else                                 //如果不是用户自己输入的话就执行这段代码
  29.                         String contents=content.getText().toString().trim();
  30.                         if(!TextUtils.isEmpty(contents))  //判断联系人为不为空
  31.                         {
  32.                                 //循环选中的每个联系人发送信息
  33.                                 for(Contact c : selectContact)   //循环集合里面的内容
  34.                                 {
  35.                                         ContentValues values=new ContentValues();
  36.                                         values.put("address",c.getPhone());   //号码
  37.                                         values.put("type",2);   //发送发的类型码
  38.                                         SmsManager smsManager=SmsManager.getDefault();  //
  39.                                         List<String> listSms=smsManager.divideMessage(contents);   //拆分字数,分批发送每次最多发送70个字
  40.                                         for(String s : listSms)
  41.                                         {
  42.                                                 smsManager.sendTextMessage(c.getPhone(), null, s, null, null);   //执行发送方法
  43.                                                 values.put("body",s);   
  44.                                                 values.put("date", new Date().getTime());
  45.                                                 resolver.insert(uri, values);   //将发送的数据插入到数据库中
  46.                                         }
  47.                                         values=null;
  48.                                         Toast.makeText(this, "给"+c.getName()+"发送信息成功!", Toast.LENGTH_SHORT).show();
  49.                                 }
  50.                                
  51.                                 mobile.setText("");
  52.                                 content.setText("");
  53.                                 selectContact=null;
  54.                                 selectedFlag=0;
  55.                                 mobile.setEnabled(true); //文本框变为可用
  56.                                
  57.                                
  58.                         }else{
  59.                                 Toast.makeText(this, "信息内容不能为空!", Toast.LENGTH_SHORT).show();
  60.                         }
  61.                 }
  62.                
  63.                
  64.                
  65.         }
复制代码


3.给组件设置适配器的类:

  1. private class MyAdapter extends BaseAdapter
  2.         {

  3.                 @Override
  4.                 public int getCount() {
  5.                        
  6.                         return contacts.size();   //这个返回的是联系人的总数
  7.                 }

  8.                 @Override
  9.                 public Object getItem(int position) {
  10.                         // TODO Auto-generated method stub
  11.                         return contacts.get(position);  //返回所指定的条目
  12.                 }

  13.                 @Override
  14.                 public long getItemId(int position) {
  15.                         // TODO Auto-generated method stub
  16.                         return position;           //返回指定条目的位置
  17.                 }

  18.                 @Override
  19.                 public View getView(int position, View convertView, ViewGroup parent) {
  20.                         View view=View.inflate(SelectContactsActivity.this, R.layout.contacts_items, null);  
  21.                         //将布局文件转化为view对象注意这个布局文件里面的组件就是你自定义的那个组件
  22.                         PhoneView phoneView=(PhoneView) view.findViewById(R.id.phoneView);   //获取自定义组件的对象
  23.                         phoneView.setName(contacts.get(position).getName());   //设置它的属性
  24.                         phoneView.setPhone(contacts.get(position).getPhone());
  25.                         phoneView.setCheckBox(contacts.get(position).isChecked());
  26.                         return view;            //返回view对象
  27.                 }
  28.                
  29.         }
复制代码



捕获.PNG
QQ截图20141105225241.png
QQ截图20141105225126.png

sendsms.zip

1.04 MB, 下载次数: 0

源代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-6 01:21:30 | 显示全部楼层
支持玄玄~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-6 08:59:51 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-6 09:43:12 | 显示全部楼层
大神啊,太牛了   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表