5.AutoCompleteTextView、自定义广播
新建信息

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:orientation="vertical" >
。。。。。
<!-- android:completionThreshold="1" 当弹出建议框的时候,actv中输入的字符的个数 -->
<AutoCompleteTextView
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:id="@+id/actv"
android:textColor="@android:color/black"
android:completionThreshold="1"
android:background="@drawable/et_common_bg"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/select_contact_bg"
android:id="@+id/iv_select_contact"
/>
</LinearLayout>
<EditText
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:background="@drawable/et_common_bg"
android:id="@+id/et_input_msg"
android:gravity="top"//写上top默认就在上面
/>
<Button
android:id="@+id/btn_send_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/btn_common_bg"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="发送短信" />
</LinearLayout>
public class NewMessageUI extends Activity implements OnClickListener {
private AutoCompleteTextView actv;
private ImageView selectContact;
private EditText inputMsg;
protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_message);
actv = (AutoCompleteTextView) findViewById(R.id.actv);
selectContact = (ImageView) findViewById(R.id.iv_select_contact);
inputMsg = (EditText) findViewById(R.id.et_input_msg);
selectContact.setOnClickListener(this);
findViewById(R.id.btn_send_msg).setOnClickListener(this);
adapter = new ACTVAdapter(this, null);
actv.setAdapter(adapter);
adapter.setFilterQueryProvider(new FilterQueryProvider() {
@Override
/**
* 当actv 中的内容发生改变时,回调此方法
* @param constraint
* @return
*/
public Cursor runQuery(CharSequence constraint) {
System.out.println(constraint);
Cursor cursor = getContentResolver().query(MyConstants.URI_CONTACTS, projection, "data1 like '%"+constraint+"%'", null, null);
return cursor;
}
});
}
/**
* 要查询的列
*/
private String[] projection = {
"_id","data1","display_name"
};
private final int INDEX_NAME=2;
private final int INDEX_NUMBER=1;
private ACTVAdapter adapter;
class ACTVAdapter extends CursorAdapter{
public ACTVAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
/**
* 该方法在点击actv中弹出的listView时,将返回值设置给 actv
*/
public CharSequence convertToString(Cursor cursor) {
return cursor.getString(INDEX_NUMBER);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = View.inflate(context, R.layout.list_item_actv, null);
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView name = (TextView) view.findViewById(R.id.tv_name_actv);
TextView number = (TextView) view.findViewById(R.id.tv_number_actv);
name.setText(cursor.getString(INDEX_NAME));
number.setText(cursor.getString(INDEX_NUMBER));
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_send_msg:// 发送短信的按钮
String address = actv.getText().toString();
if(TextUtils.isEmpty(address.trim())){
Toast.makeText(this, "请输入收件人号码", 0).show();
return ;
}
String msg = inputMsg.getText().toString();
if(TextUtils.isEmpty(msg.trim())){
Toast.makeText(this, "请输入短信内容", 0).show();
return ;
}
// 开始发送短信
Tools.sendMessage(this, msg, address);
// 清空输入框
inputMsg.setText("");
break;
case R.id.iv_select_contact:// 点击选择联系人的图片
Intent intent = new Intent();
intent.setAction("android.intent.action.PICK");//不能显示启动,因为有可能系统程序的类名改变了
intent.setData(Uri.parse("content://com.android.contacts/contacts"));
// startActivity(intent);
startActivityForResult(intent, 99);
break;
default:
break;
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String stringExtra = data.getStringExtra("phone");
System.out.println("stringExtra::"+stringExtra);
Uri uri = data.getData();
Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);
// Tools.printCursor(cursor);
cursor.moveToNext();// 返回的cursor默认指向-1行 ,
int contactId = cursor.getInt(0); // 仅查询一列,所以列的索引值 输入 0
Cursor cursor2 = getContentResolver().query(MyConstants.URI_CONTACTS, new String[]{"data1"}, " contact_id = "+contactId, null, null);
cursor2.moveToNext();// 返回的cursor默认指向-1行 ,
String number = cursor2.getString(0);
actv.setText(number);
}
}
/**
* 发送短信
* @param ctx
* @param msg 短信内容
* @param address 收信人的电话号码
*/
public static void sendMessage(Context ctx, String msg, String address) {
SmsManager smsManager = SmsManager.getDefault();
//对短信内容进行切割,防止,内容过长。
ArrayList<String> msgList = smsManager.divideMessage(msg);
//用于启动广播的意图
Intent intent = new Intent("com.itheima.smsmanager39.receive.SmsSendSuccessReceiver");
PendingIntent sentIntent = PendingIntent.getBroadcast(ctx, 88, intent, PendingIntent.FLAG_ONE_SHOT);
for (int i = 0; i < msgList.size(); i++) {
String oneMsg = msgList.get(i);
smsManager.sendTextMessage(
address, // 收信人号码
null, // 短信服务中心的号码
oneMsg, // 要发送的内容
sentIntent, // 我们发送成功后的,隐式意图
null); // 对方接收成功后的,隐式意图
}
insertMsg2msmDb(ctx,msg,address);
}
/**
* 将短信内容插入系统数据库
* @param ctx
* @param msg 短信内容
* @param address 收短信的号码
*/
private static void insertMsg2msmDb(Context ctx, String msg, String address) {
ContentValues values = new ContentValues();
values.put("address", address);
values.put("body", msg);
values.put("type", MyConstants.TYPE_SEND);
ctx.getContentResolver().insert(MyConstants.URI_SMS, values);
}
public class SmsSendSuccessReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "短信已经发送成功", 0).show();
}
}
<activity
android:name="com.itheima.smsmanager39.NewMessageUI"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize">
</activity>
5.AutoCompleteTextView、自定义广播的更多相关文章
- android 发送自定义广播以及接收自定义广播
发送自定义广播程序: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- Android(java)学习笔记178:BroadcastReceiver之 自定义广播
广播使用: 电台:对外发送信号.---------电台发送广播(可以自定义) 收音机:接收电台的信号.-----广播接收者 这里,我们就说明自定 ...
- [android] 自定义广播事件
上一节的短信拦截在4.0以上系统中无效,可以使用这种办法实现,定义一个activity,清单文件中指定主题为透明,在onCreate()方法里面直接调用finsh()方法,关掉,这样可以就可以实现了 ...
- android: 发送自定义广播
5.3.1 发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发 出去也是白发.因此新建一个 MyBroadcastReceiver 继承自 Broadca ...
- 自定义广播(BroadcastReceiver)事件 --Android开发
本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...
- Android8自定义广播无法收到消息
在Android 8之前,如果要发送自定义的静态广播,做好其他配置后,只需实例化一个Intent对象intent,然后将其作为参数传入sendBroadcast()方法中即可,例如 Intent in ...
- android中实现自定义广播
自定义广播分两个步骤:1.发送广播 2.接收广播 一.先看如何接收广播: 我使用的是Android Studio,File->New->Other->Broadcast Receiv ...
- MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到
对照<第一行代码——Android>进行学习,第五章中说到广播包的相关知识,前面获取广播等程序例程都可以跑的通,但是在5.3.2节中,程序A发送自定义广播,并接收自定义广播,同时程序B也接 ...
- Android(java)学习笔记121:BroadcastReceiver之 自定义广播
广播使用: 电台:对外发送信号.---------电台发送广播(可以自定义) 收音机:接收电台的信号.-----广播接收者 这里,我们就说明自定 ...
随机推荐
- .net WebApi中使用swagger生成WepApi集成测试工具
我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...
- 6B - 火星A+B
读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数.例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的 ...
- Json格式获取接口返回的值
关键字:Set Variable Get Json Value to json Get From Dictionary 具体关键字用法不再说明,可百度一下 ...
- docker镜像运行错误排查
docker做服务时,如果客户端无法连接,错误排查: 1.先使用 docker ps 查看镜像是否都在运行中,如果没有就进入镜像查看日志 2.如果确定代码及配置文件没有问题,就需要检查镜像的替换是否正 ...
- 201621123002《JAVA程序设计》第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 用 ...
- npm-package.json
Specifics of npm's package.json handling DESCRIPTION§ This document is all you need to know about wh ...
- java 判断null和空
判断null和空 org.apache.commons.lang3 if(StringUtils.isBlank(valuationMeasureUnitName)){ }
- list.get(0)防止NPE
package com.chuangjin.p2p; import com.chuangjin.core.utils.JsonUtils; import java.util.ArrayList; im ...
- 关于TypeError: strptime() argument 1 must be str, not bytes解析
关于TypeError: strptime() argument 1 must be str, not bytes解析 在使用datetime.strptime(s,fmt)来输出结果日期结果时, ...
- JavaScript判断系统语言
var lang= null; function language(){ var language=null; if (navigator.appName == 'Netscape'){ langua ...