亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程實現讀取手機聯系人、撥號、發送短信及長按菜單操作方法實例小結

2020-04-11 11:19:59
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程實現讀取手機聯系人、撥號、發送短信及長按菜單操作方法。分享給大家供大家參考,具體如下:

1.Andrid項目結構圖↓主要操作圖中紅色方框內的文件。

2.首先布局代碼如下

a, main.xml 程序運行的主界面,主要用ListView列表控件展示手機聯系人

<?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" ><ListViewandroid: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的列表項布局文件,相當于展示模版

<?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" ><ImageViewandroid:id="@+id/imgView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/photo"android:paddingRight="2dip" /><TextViewandroid: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" /><TextViewandroid: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 長按菜單顯示聯系人詳細布局界面,示例只做了跳轉展示

<?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" ><TextViewandroid:id="@+id/ymw"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceMedium"/></LinearLayout>

2.Java實現代碼如下

a,MainActivity.java 程序運行的入口文件

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 {@Overridepublic 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() {@Overridepublic 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);// 查看有多少電話號碼 沒有則返回為0int 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 主界面長按菜單顯示聯系人詳細的跳轉界面,接受主界面傳來的參數

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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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節點上加入如下代碼

<!--添加權限--><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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品一区二区| 国产91精品久久久久久久| 日韩精品极品在线观看| 精品偷拍各种wc美女嘘嘘| 91亚洲永久免费精品| 国产精品人成电影在线观看| 美女黄色丝袜一区| 成人在线观看视频网站| 国产91精品高潮白浆喷水| 亚洲综合成人婷婷小说| 久久九九免费视频| 亚洲天堂男人的天堂| 欧洲s码亚洲m码精品一区| 欧美色道久久88综合亚洲精品| 九九精品在线播放| 国产男人精品视频| 欧美特级www| 国产精品久久久久久久7电影| 日韩成人在线视频| 中文字幕精品久久久久| 亚洲国产成人一区| 成人免费网站在线观看| 性色av一区二区咪爱| 精品毛片网大全| 色悠久久久久综合先锋影音下载| 久久夜精品va视频免费观看| 毛片精品免费在线观看| 亚洲精品日韩丝袜精品| 亚洲国产精久久久久久久| 久久精品中文字幕电影| 亚洲精品狠狠操| 黑丝美女久久久| 亚洲人成网站777色婷婷| 国产精品久久久久77777| 成人信息集中地欧美| 神马久久久久久| 92福利视频午夜1000合集在线观看| 91中文在线观看| 亚洲成年人在线| 国产精品视频免费在线观看| 国产成人福利网站| 国产精品中文久久久久久久| 久久久久国产视频| 欧美在线观看网址综合| 亚洲国产一区自拍| 91中文字幕在线观看| 国产精品久久久久久影视| 日韩精品免费一线在线观看| 亚洲成av人影院在线观看| 欧美日韩国产一中文字不卡| 国产91精品高潮白浆喷水| 亚洲欧美日韩网| 中文字幕亚洲欧美一区二区三区| 亚洲乱亚洲乱妇无码| 欧美国产亚洲精品久久久8v| 九九热精品视频在线播放| 日韩av有码在线| 亚洲精品国产电影| 另类美女黄大片| 中文字幕在线成人| 91产国在线观看动作片喷水| 久久免费视频网站| 国产国产精品人在线视| 欧美性感美女h网站在线观看免费| 欧美激情视频网站| 中文字幕精品国产| 日韩网站免费观看| 亚洲精品电影在线观看| 亚洲国产欧美日韩精品| 欧美日韩免费在线| 97热在线精品视频在线观看| 国产亚洲一区二区在线| 91精品国产网站| 2025国产精品视频| 日本高清+成人网在线观看| 青草青草久热精品视频在线网站| 91av在线视频观看| 久久精品成人欧美大片| 国产999视频| 成人www视频在线观看| 琪琪亚洲精品午夜在线| 国产精品99导航| 成人精品福利视频| 亚洲97在线观看| 久久久99免费视频| 久久久精品久久久| 中文字幕日韩在线播放| 欧美国产一区二区三区| 亚洲精品第一国产综合精品| 国产精品久久久久久影视| 超碰97人人做人人爱少妇| 久久精品国产清自在天天线| 国产亚洲在线播放| 亚洲精品国产欧美| 亚洲深夜福利视频| 日韩精品有码在线观看| 欧美激情精品久久久久久黑人| 亚洲精品一区二区三区不| 中文.日本.精品| 欧美激情综合色综合啪啪五月| 亚洲精品福利在线| 亚洲丁香婷深爱综合| 亚洲无亚洲人成网站77777| 国产91精品最新在线播放| 亚洲成人av片| 国产福利精品在线| 精品国产一区二区三区在线观看| 这里只有精品在线观看| 国产精品久久久久久av下载红粉| 高清一区二区三区日本久| 伊人久久男人天堂| 粗暴蹂躏中文一区二区三区| 一本色道久久综合狠狠躁篇的优点| 色婷婷久久av| 国产精品pans私拍| 国产97在线视频| 精品国产福利视频| 欧美区在线播放| 日本一区二区不卡| 精品亚洲夜色av98在线观看| 欧美午夜精品久久久久久人妖| 国产精品视频免费在线| 日韩在线精品视频| 色综合久久久888| 国产精品白丝av嫩草影院| 欧美一区二区三区艳史| 日本精品一区二区三区在线| 日韩av网站电影| 91在线观看免费| 欧美第一黄色网| 午夜精品在线观看| 日韩av成人在线| 美女精品久久久| 久久久女女女女999久久| 亚洲色图色老头| 在线视频国产日韩| 亚洲国产欧美一区| 欧美一级免费视频| 国产成人黄色av| 欧美黑人巨大xxx极品| 精品五月天久久| 亚洲自拍小视频| 欧美国产日韩一区| 亚洲欧美国产精品专区久久| 78色国产精品| 欧美精品一本久久男人的天堂| 亚洲欧美日本精品| 最近2019年好看中文字幕视频| 欧美精品激情blacked18| 国产精自产拍久久久久久蜜| 岛国av一区二区在线在线观看| 中国china体内裑精亚洲片| 亚洲欧美国产一本综合首页| 在线观看91久久久久久| 国产综合久久久久久| 久久久久久成人精品| 国产午夜精品理论片a级探花| 最近2019年好看中文字幕视频| 国产欧美日韩亚洲精品| 欧美黑人狂野猛交老妇| 久久人人爽人人爽爽久久| 日韩在线欧美在线国产在线| 久久香蕉国产线看观看网| 国产精品激情av在线播放|