- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法。分享给大家供大家参考,具体如下:
1.Andrid项目结构图↓主要操作图中红色方框内的文件.
2.首先布局代码如下 。
a, main.xml 程序运行的主界面,主要用ListView列表控件展示手机联系人 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:background
=
"@drawable/bg"
android:orientation
=
"vertical"
>
<
ListView
android:id
=
"@+id/listView"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:layout_marginLeft
=
"5dip"
android:cacheColorHint
=
"#00000000"
android:divider
=
"@drawable/divider_horizontal_bright"
android:paddingRight
=
"5dip"
>
</
ListView
>
</
LinearLayout
>
|
b.list_item.xml ListView的列表项布局文件,相当于展示模版 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:orientation
=
"horizontal"
>
<
ImageView
android:id
=
"@+id/imgView"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:contentDescription
=
"@string/photo"
android:paddingRight
=
"2dip"
/>
<
TextView
android:id
=
"@+id/name"
android:layout_width
=
"80dip"
android:layout_height
=
"wrap_content"
android:layout_marginLeft
=
"10dip"
android:paddingTop
=
"8dip"
android:singleLine
=
"false"
android:textAppearance
=
"?android:attr/textAppearanceMedium"
android:textColor
=
"#ffffff"
/>
<
TextView
android:id
=
"@+id/number"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:layout_marginRight
=
"6dip"
android:paddingTop
=
"8dip"
android:singleLine
=
"false"
android:textColor
=
"#ffffff"
android:textAppearance
=
"?android:attr/textAppearanceMedium"
/>
</
LinearLayout
>
|
c,phonedetails.xml 长按菜单显示联系人详细布局界面,示例只做了跳转展示 。
1
2
3
4
5
6
7
8
9
10
11
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:orientation
=
"vertical"
>
<
TextView
android:id
=
"@+id/ymw"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:textAppearance
=
"?android:attr/textAppearanceMedium"
/>
</
LinearLayout
>
|
2.Java实现代码如下 。
a,MainActivity.java 程序运行的入口文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
package
com.example.myandroid;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.Iterator;
import
android.app.Activity;
import
android.content.ContentResolver;
import
android.content.Intent;
import
android.database.Cursor;
import
android.net.Uri;
import
android.os.Bundle;
import
android.provider.ContactsContract;
import
android.provider.ContactsContract.CommonDataKinds;
import
android.view.ContextMenu;
import
android.view.ContextMenu.ContextMenuInfo;
import
android.view.MenuItem;
import
android.view.View;
import
android.view.View.OnCreateContextMenuListener;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.ListView;
import
android.widget.SimpleAdapter;
import
android.widget.Toast;
import
com.ymw.details.Detail;
public
class
MainActivity
extends
Activity {
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
final
ListView listView = (ListView) findViewById(R.id.listView);
// 生成动态数组,加入数据
ArrayList<HashMap<String, Object>> listItem = fillMaps();
SimpleAdapter listItemAdapter =
new
SimpleAdapter(
this
, listItem,
R.layout.list_item,
new
String[] {
"imgView"
,
"name"
,
"number"
},
new
int
[] {
R.id.imgView, R.id.name, R.id.number });
listView.setAdapter(listItemAdapter);
// 添加单击事件
listView.setOnItemClickListener(
new
OnItemClickListener() {
@Override
public
void
onItemClick(AdapterView<?> arg0, View arg1,
int
arg2,
long
arg3) {
HashMap<String, String> map = (HashMap<String, String>) listView
.getItemAtPosition(arg2);
String name = map.get(
"name"
);
Toast toast = Toast.makeText(getApplicationContext(),
"第"
+ arg2 +
"项"
+ name, Toast.LENGTH_LONG);
toast.show();
String phoneNum = map.get(
"number"
);
Intent intent =
new
Intent(Intent.ACTION_CALL, Uri.parse(
"tel:"
+ phoneNum));
startActivity(intent);
}
});
// 添加长按菜单
listView.setOnCreateContextMenuListener(
new
OnCreateContextMenuListener() {
public
void
onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle(
"长按菜单-ContextMenu"
);
menu.add(
0
,
0
,
0
,
"查看详细"
);
menu.add(
0
,
1
,
0
,
"发送信息"
);
menu.add(
0
,
2
,
0
,
"删除联系人"
);
}
});
}
public
boolean
onContextItemSelected(MenuItem item) {
// setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目");
Toast.makeText(getApplicationContext(),
"选择了"
+ item.getItemId() + item.getTitle() +
"项"
,
Toast.LENGTH_LONG).show();
int
id = item.getItemId();
// 查看详细
if
(id ==
0
) {
Intent intent =
new
Intent();
intent.putExtra(
"ymw"
, item.getTitle());
intent.setClass(MainActivity.
this
, Detail.
class
);
startActivity(intent);
}
// 发送短信
else
if
(id ==
1
) {
Uri uri = Uri.parse(
"smsto://18664599745"
);
Intent intent =
new
Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra(
"sms_body"
,
"ymw-LOVE-yh"
);
startActivity(intent);
}
// 删除联系人
else
if
(id ==
2
) {
}
return
super
.onContextItemSelected(item);
}
// 获取手机联系人列表方法一
public
ArrayList<HashMap<String, Object>> GetContects() {
ArrayList<HashMap<String, Object>> list =
new
ArrayList<HashMap<String, Object>>();
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null
,
null
,
null
,
ContactsContract.Contacts.DISPLAY_NAME
+
" COLLATE LOCALIZED ASC"
);
if
(cursor.moveToFirst()) {
int
idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
int
nameColum = cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
do
{
String contactId = cursor.getString(idColumn);
String disPlayNameString = cursor.getString(nameColum);
// 查看有多少电话号码 没有则返回为0
int
phoneCount = cursor
.getInt(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if
(phoneCount >
0
) {
// 获得联系人的电话号码
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null
,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+
"="
+ contactId,
null
,
null
);
HashMap<String, Object> map =
new
HashMap<String, Object>();
map.put(
"imgView"
, R.drawable.ic_launcher);
map.put(
"name"
, disPlayNameString);
list.add(map);
}
}
while
(cursor.moveToNext());
if
(cursor !=
null
)
cursor.close();
}
return
list;
}
// 获取联系人方法二
public
ArrayList<HashMap<String, Object>> fillMaps() {
ArrayList<HashMap<String, Object>> items =
new
ArrayList<HashMap<String, Object>>();
ContentResolver cr = getContentResolver();
HashMap<String, ArrayList<String>> hashMap =
new
HashMap<String, ArrayList<String>>();
Cursor phone = cr.query(CommonDataKinds.Phone.CONTENT_URI,
new
String[] { CommonDataKinds.Phone.CONTACT_ID,
CommonDataKinds.Phone.DISPLAY_NAME,
CommonDataKinds.Phone.NUMBER,
CommonDataKinds.Phone.DATA1
// CommonDataKinds.StructuredPostal.DATA3,
},
null
,
null
,
null
);
while
(phone.moveToNext()) {
String contactId = phone.getString(phone
.getColumnIndex(CommonDataKinds.Phone.CONTACT_ID));
String displayName = phone.getString(phone
.getColumnIndex(CommonDataKinds.Phone.DISPLAY_NAME));
String PhoneNumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String address = phone.getString(phone
.getColumnIndex(CommonDataKinds.Phone.DATA1));
// 以contactId为主键,把同一人的所有电话都存到一起。
ArrayList<String> ad = hashMap.get(contactId);
if
(ad ==
null
) {
ad =
new
ArrayList<String>();
ad.add(displayName);
ad.add(PhoneNumber);
// ad.add(address);
hashMap.put(contactId, ad);
}
else
{
ad.add(PhoneNumber);
}
}
phone.close();
ArrayList<String> tmpList;
String tmpStr =
""
;
int
k;
Iterator iter = hashMap.entrySet().iterator();
while
(iter.hasNext()) {
HashMap.Entry entry = (HashMap.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
tmpList = (ArrayList) val;
tmpStr =
""
;
for
(k =
1
; k < tmpList.size(); k++) {
tmpStr = tmpStr + tmpList.get(k) +
','
;
}
tmpStr = GetString(tmpStr);
HashMap<String, Object> tmpMap =
new
HashMap<String, Object>();
tmpMap.put(
"name"
, tmpList.get(
0
));
tmpMap.put(
"number"
, tmpStr);
tmpMap.put(
"imgView"
, R.drawable.ic_launcher);
items.add(tmpMap);
}
return
items;
}
private
String GetString(String str) {
String strLast =
""
;
int
i = str.lastIndexOf(
","
);
if
(i >
0
) {
strLast = str.substring(
0
, str.length() -
1
);
}
return
strLast.replace(
" "
,
""
).replace(
","
,
"\n"
).replace(
"+86"
,
""
);
}
}
|
b,Detail.java 主界面长按菜单显示联系人详细的跳转界面,接受主界面传来的参数 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package
com.ymw.details;
import
com.example.myandroid.R;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.widget.TextView;
public
class
Detail
extends
Activity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
setContentView(com.example.myandroid.R.layout.phonedetails);
Intent intent = getIntent();
String strPara = intent.getStringExtra(
"ymw"
);
TextView tView = (TextView) findViewById(R.id.ymw);
tView.setText(strPara);
}
}
|
3.获取手机联系人和拨号发短信等需要配置权限 。
在AndroidManifest.xml文件中的application节点上加入如下代码 。
1
2
3
4
|
<!--添加权限-->
<
uses-permission
android:name
=
"android.permission.SEND_SMS"
/>
<
uses-permission
android:name
=
"android.permission.CALL_PHONE"
/>
<
uses-permission
android:name
=
"android.permission.READ_CONTACTS"
/>
|
4.使用Android模拟器或连接Android智能手机运行本程序可以看到手机联系人列表, 。
单击某个联系人会直接拨号,长按某个联系人会出现菜单选项,可以选择发送短信.
希望本文所述对大家Android程序设计有所帮助.
最后此篇关于Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结的文章就讲到这里了,如果你想了解更多关于Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在德国,移动运营商通常会提供一种简单的方法来配置您的手机的 MMS 和 GPRS:在运营商的网站上输入您的电话号码和设备型号后,您会收到一条发送给您的“配置短信”。 我试图从技术角度理解它是如何工作的
我正在开发一个非常复杂的应用程序。它针对手机和平板电脑有不同的布局,我不知道最好的方法。 我听说您可以发布两个不同的应用程序,一个用于移动设备,另一个用于平板电脑,但人们不推荐它。 我应该用两个不同的
我不确定这个问题属于这里....但仍然.... 我的应用程序每 3 分钟与服务器交换一次数据。我在手机覆盖范围内使用蜂窝平板电脑(不是 Wi-Fi)。如果一个人在没有手机覆盖的地方使用它,他将不会获得
我有这样的 CSS: .editTable-body { width: 100%; height:140px; margin-top: 20px; overflow:
我有这个链接,它在移动设备上被设计为按钮,我面临的问题是它在手机和平板电脑上看起来不同。这是因为设备分辨率还是我应该通过 CSS 修复的问题。这是我当前的 CSS CSS border-radiu
大家好,我一个月前开始学习网络开发,但我遇到了背景图片无法在移动设备上正确显示的问题。 我正在使用下面的模板,甚至这个模板也有同样的问题。 问题只是背景图像在移动设备上放大,而不是相应地与屏幕尺寸成比
我一直在尝试为我的网站制作一个导航栏,但是当我移动它时,我导航栏中的列表移动了 40 像素到计算机屏幕的右侧,那里没有任何东西。 你能帮帮我吗? 最佳答案 在您的导航栏样式中,将导航栏的宽度设置为 1
一周以来,我一直不明白为什么我的网站被设计成响应式的,一切正常吗?笔记本电脑即使放在小尺寸的情况下也能完美运行,然后进入我的手机却没有响应。 我试过卸载插件,我更改了主题,但找不到原因。 你能抱住我吗
我在 my website 上实现了以下字体. /* Vivaldi Font */ @font-face { font-family: 'vivaldi'; src: url('as
我正在使用 Angular 4 并构建一个应用程序。它工作正常,但当我在移动设备上运行时出现问题。整个风格发生了变化并分发了整个应用程序。我担心我必须做什么。任何帮助将不胜感激 最佳答案 在表格前取
我目前使用的是 HTC Wildfire 手机的接近传感器。问题在于,如果传感器前方 1 厘米范围内有物体,它只会返回一个 bool 值。 所以,我想问一下市场上是否有一款 Android 手机具有接
根据 this Android C2DM 通过心跳机制使套接字保持 Activity 状态,使其能够接收推送消息。这让我希望我可以通过活跃的 wifi 连接向休眠手机发送消息。 我已经将“delay_
我不希望小型设备的边缘有任何空白。当屏幕已经很小时,使用除屏幕全宽之外的任何东西都会适得其反。 所以我通过wordpress使用了一个主题,但我想出了容器div并且能够修改它,我想让它更窄。 我还声明
有谁知道这些设备之一是否连接到网络,是否可以从 header 或其他方式读取其电话号码? 最佳答案 电话号码不会出现在 HTTP header 中。您的 IP 地址将对网络服务器可见,仅此而已。 编辑
我在使用以下步骤在 android 设备上设置设备所有者时遇到错误。这过去在其他设备上也有效: 执行恢复出厂设置 在设备上启用 Debug模式 从命令行在连接的设备上运行以下命令: adb insta
有人尝试在 Windows Phone 7.1 (RC) 上使用 Udp 单播吗?我有几个问题想问你们。 根据文件http://msdn.microsoft.com/en-us/library/sys
我正在制作一个游戏(仅使用 eclipse 和 android sdk),并且我有一个基于文本文件输入的关卡构建功能。 例如,“levelone.txt”可能包含“[2,5],[14,7],[10,9
我听说要测试 Android 应用程序,您必须在 2 部不同的手机上进行测试(取决于分辨率)推荐哪些手机? 最佳答案 我还建议在一台配备“纯”Android 的设备上进行测试,并且至少在另一台配备 H
我正在使用蓝牙设备手动连接 Android 手机,没有问题。但我的问题是当我启动 Activity 或应用程序时如何自动连接。 我正在引用示例 API 中的蓝牙聊天进行连接。 http://devel
我知道我可以使用 uri 在页面之间传递值,例如: NavigationService.Navigate( new Uri("/DestinationPage.xaml?parameter1=v1",
我是一名优秀的程序员,十分优秀!