Android电话本实现
Android电话本实现
- 需求
- 效果
- 添加联系人
- 删除联系人
- 查询联系人
- 修改联系人
- 拨打电
- 部分实现代码
- 数据库
- 添加联系人
- 布局
- 限制添加长度
- 添加页面
- 布局
- 代码
- 删除联系人
- 查询联系人
- 修改联系人和拨打电话页面
- 主页面
- 布局
- 代码
- 完整项目链接
完整项目下载链接
需求
可以实现联系人的增删改查
可以实现电话的拨打
采用内置数据库
效果
添加联系人
删除联系人
查询联系人
修改联系人
拨打电
部分实现代码
数据库
//创建数据库
public class MyHelper extends SQLiteOpenHelper {public MyHelper(Context context){super(context,"itcast.db",null,2);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),tels INTEGER)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
添加联系人
布局
<?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"xmlns:app="http://schemas.android.com/apk/res-auto"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/back7"android:gravity="center"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="30dp"android:paddingTop="20dp"android:background="#99404348"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="AddressBook"android:textColor="#FFFFFF"android:textSize="18sp"/>-</LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:paddingBottom="20dp"android:paddingTop="20dp"android:background="#99000000"><EditTextandroid:id="@+id/etName"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@null"android:layout_gravity="center"android:layout_marginRight="50dp"android:layout_marginLeft="50dp"android:textColor="#FFFFFF"android:textColorHint="#9F9FA0"android:hint="Name"/><Viewandroid:layout_width="match_parent"android:layout_height="1dip"android:background="#83738F"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="10dp"android:layout_marginBottom="5dp"></View><EditTextandroid:id="@+id/etNumber"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@null"android:layout_gravity="center"android:hint="Number"android:textColor="#FFFFFF"android:textColorHint="#9F9FA0"android:layout_marginLeft="50dp"android:layout_marginRight="50dp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="30dp"android:paddingTop="20dp"android:background="#99404348"android:gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="请输入姓名和电话号码"android:textColor="#DDDDDD"android:textSize="15sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="©青素"android:textColor="#FFFFFF"android:textSize="15sp"/></LinearLayout><com.spark.submitbutton.SubmitButtonandroid:id="@+id/btnSave"android:layout_width="match_parent"android:layout_height="match_parent"app:sub_btn_tick_color="@color/white"android:text="保存联系人"android:textSize="15sp"android:textColor="@color/white"app:sub_btn_duration="3000" /></LinearLayout></LinearLayout>
限制添加长度
import android.content.Context;
import android.text.Editable;
import android.text.Selection;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.Toast;//保证电话号码不超过11位 姓名不超过8个字符
public class MaxLengthWatcher implements TextWatcher {private int maxLen = 0;private EditText editText = null;private Context context=null;public MaxLengthWatcher(int maxLen, EditText editText, Context context) {this.maxLen = maxLen;this.editText = editText;this.context=context;}public void afterTextChanged(Editable arg0) {// TODO Auto-generated method stub}public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {// TODO Auto-generated method stub}public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stubEditable editable = editText.getText();int len = editable.length();if(len > maxLen){int selEndIndex = Selection.getSelectionEnd(editable);String str = editable.toString();//截取新字符串String newStr = str.substring(0,maxLen);editText.setText(newStr);editable = editText.getText();//新字符串的长度int newLen = editable.length();//旧光标位置超过字符串长度if(selEndIndex > newLen){selEndIndex = editable.length();//防止吐司出现应用程序名称提示Toast toast=Toast.makeText(context,"不能超过"+newLen+"字符长度",Toast.LENGTH_LONG);toast.setText("不能超过"+newLen+"字符长度");toast.show();}//设置新光标所在的位置Selection.setSelection(editable, selEndIndex);}}}
添加页面
布局
<?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"xmlns:app="http://schemas.android.com/apk/res-auto"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/back7"android:gravity="center"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="30dp"android:paddingTop="20dp"android:background="#99404348"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="AddressBook"android:textColor="#FFFFFF"android:textSize="18sp"/>-</LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:paddingBottom="20dp"android:paddingTop="20dp"android:background="#99000000"><EditTextandroid:id="@+id/etName"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@null"android:layout_gravity="center"android:layout_marginRight="50dp"android:layout_marginLeft="50dp"android:textColor="#FFFFFF"android:textColorHint="#9F9FA0"android:hint="Name"/><Viewandroid:layout_width="match_parent"android:layout_height="1dip"android:background="#83738F"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="10dp"android:layout_marginBottom="5dp"></View><EditTextandroid:id="@+id/etNumber"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@null"android:layout_gravity="center"android:hint="Number"android:textColor="#FFFFFF"android:textColorHint="#9F9FA0"android:layout_marginLeft="50dp"android:layout_marginRight="50dp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="30dp"android:paddingTop="20dp"android:background="#99404348"android:gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="请输入姓名和电话号码"android:textColor="#DDDDDD"android:textSize="15sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="©青素"android:textColor="#FFFFFF"android:textSize="15sp"/></LinearLayout><com.spark.submitbutton.SubmitButtonandroid:id="@+id/btnSave"android:layout_width="match_parent"android:layout_height="match_parent"app:sub_btn_tick_color="@color/white"android:text="保存联系人"android:textSize="15sp"android:textColor="@color/white"app:sub_btn_duration="3000" /></LinearLayout></LinearLayout>
代码
import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import com.spark.submitbutton.SubmitButton;public class Tels_new extends AppCompatActivity {private EditText etNameOne,etTelNumberOne;
private SubmitButton saveABook;
private String name,phone;
private MyHelper myHelper;
private SQLiteDatabase db;
private ContentValues values;
private int WRITE_EXTERNAL_STORAGE_REQUEST_CODE=1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tels_new);//隐藏Toolbar的返回箭头getSupportActionBar().setDisplayHomeAsUpEnabled(false);myHelper=new MyHelper(this);etNameOne=(EditText)findViewById(R.id.etName);etTelNumberOne=(EditText)findViewById(R.id.etNumber);saveABook=(SubmitButton) findViewById(R.id.btnSave);//监测etNameOne.addTextChangedListener(new MaxLengthWatcher(8,etNameOne,this));etTelNumberOne.addTextChangedListener(new MaxLengthWatcher(11,etTelNumberOne,this));if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {//申请WRITE_EXTERNAL_STORAGE权限ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},WRITE_EXTERNAL_STORAGE_REQUEST_CODE); }//保存按钮 点击保存saveABook.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SaveABook();}});}@Override//权限获取回调public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){super.onRequestPermissionsResult(requestCode, permissions, grantResults);doNext(requestCode,grantResults);}//自己用肯定给 先放起来 啥也不干private void doNext(int requestCode, int[] grantResults){if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE){if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {} else {}}}//保存联系人void SaveABook(){name=etNameOne.getText().toString();phone=etTelNumberOne.getText().toString();db=myHelper.getWritableDatabase();values=new ContentValues();values.put("name",name);values.put("tels",phone);db.insert("information",null,values);db.close();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);getMenuInflater().inflate( R.menu.back, menu);return true;}//使用菜单返回上一级public boolean onOptionsItemSelected(MenuItem item){if(item.getItemId()==R.id.action_settings1) {Intent intent = new Intent(Tels_new.this, MainActivity.class);startActivity(intent);}return super.onOptionsItemSelected(item);}}
删除联系人
//点击事件 并传入参数mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Intent intent = new Intent(MainActivity.this, Change.class);intent.putExtra("nameInt",names.get(position));intent.putExtra("telInt",tels.get(position));startActivity(intent);}});//长按事件 删除数据mlistview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Override//长按删除public boolean onItemLongClick(AdapterView<?> arg0, View arg1,final int arg2, long arg3) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setPositiveButton("删除", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {db=myHelper.getWritableDatabase();db.delete("information","name=?",new String[]{names.get(arg2)});db.close();names.remove(arg2);tels.remove(arg2);madapter.notifyDataSetChanged();}});builder.create().show();return true; // 这里一定要改为true,代表长按自己消费掉了,若为false,触发长按事件的同时,还会触发点击事件</span></strong>}});}
查询联系人
//完成搜索功能searchBt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {myHelper=new MyHelper(MainActivity.this);db=myHelper.getWritableDatabase();names.clear ();tels.clear();Cursor cursor=db.query("information",null,"name=?",new String[]{searchEt.getText().toString()},null,null,null);if(cursor.getCount()!=0){cursor.moveToFirst();names.add(cursor.getString(1));tels.add(cursor.getString(2));while(cursor.moveToNext()){names.add(cursor.getString(1));tels.add(cursor.getString(2));}}else{cursor=db.query("information",null,null,null,null,null,null);Toast toast=Toast.makeText(MainActivity.this,"抱歉,未发现该联系人!",Toast.LENGTH_LONG);toast.setText("抱歉,未发现该联系人!");toast.show();}madapter.notifyDataSetChanged();cursor.close();db.close();}});
修改联系人和拨打电话页面
import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;public class Change extends AppCompatActivity {private EditText nameTwo,numberTwo;
private ImageView modify,call;private MyHelper myHelper;private SQLiteDatabase db;private ContentValues values;private String name;private String telnumber;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_change);//隐藏Toolbar的返回箭头getSupportActionBar().setDisplayHomeAsUpEnabled(false);myHelper=new MyHelper(this);//接收传入的电话数据Intent intent=getIntent();name=intent.getStringExtra("nameInt");telnumber=intent.getStringExtra("telInt");nameTwo=(EditText)findViewById(R.id.etNameTwo);numberTwo=(EditText)findViewById(R.id.etNumberTwo);nameTwo.setText(name);numberTwo.setText(telnumber);//监测文本长度nameTwo.addTextChangedListener(new MaxLengthWatcher(8,nameTwo,this));numberTwo.addTextChangedListener(new MaxLengthWatcher(11,numberTwo,this));//两个图片按钮modify=findViewById(R.id.imVmodify);call=findViewById(R.id.imVcall);modify.setClickable(true);//激活按钮call.setClickable(true);//修改modify.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {db=myHelper.getWritableDatabase();//初始化数据库values=new ContentValues();values.put("name",nameTwo.getText().toString());values.put("tels",numberTwo.getText().toString());db.update("information",values,"name=?",new String[]{name});//防止吐司出现应用程序名称提示Toast toast=Toast.makeText(Change.this,"修改成功",Toast.LENGTH_LONG);toast.setText("修改成功");toast.show();db.close();}});//拨打call.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {if(ContextCompat.checkSelfPermission(Change.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(Change.this,new String[]{Manifest.permission.CALL_PHONE},1);}else {}//拨打电话Intent intent = new Intent();intent.setAction(Intent.ACTION_CALL);//设置活动类型intent.setData(Uri.parse("tel:"+telnumber));//设置数据startActivity(intent);}});}public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);getMenuInflater().inflate( R.menu.back, menu);return true;}//使用菜单返回上一级public boolean onOptionsItemSelected(MenuItem item){if(item.getItemId()==R.id.action_settings1) {Intent intent = new Intent(Change.this, MainActivity.class);startActivity(intent);}return super.onOptionsItemSelected(item);}
}
主页面
布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/back3"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_margin="5dp"><EditTextandroid:id="@+id/etSearch"android:layout_width="140dp"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="5"android:background="#ffffff"android:ems="10"android:gravity="center"android:hint="搜索联系人"android:inputType="textPersonName"android:textSize="25sp" /><ImageViewandroid:id="@+id/imgsearch"android:layout_marginTop="3dp"android:layout_width="50dp"android:layout_height="39dp"app:srcCompat="@android:drawable/ic_menu_search" /></LinearLayout><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="5dp"android:layout_centerVertical="true"android:gravity="center"android:layout_marginEnd="20dp"/></LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
代码
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private ListView mlistview;
private ImageView searchBt;
private EditText searchEt;
private MyHelper myHelper;
private SQLiteDatabase db;
private ArrayList<String> names=new ArrayList<>();
private ArrayList<String> tels=new ArrayList<>();
private MyBaseAdapter madapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化listviewmlistview=(ListView) findViewById(R.id.listView);madapter=new MyBaseAdapter();mlistview.setAdapter(madapter);myHelper=new MyHelper(this);db=myHelper.getWritableDatabase();//查询所有数据 显示页面Cursor cursor=db.query("information",null,null,null,null,null,null);if(cursor.getCount()==0){//防止吐司出现应用程序名称提示Toast toast=Toast.makeText(MainActivity.this,"暂时没有联系人请添加!",Toast.LENGTH_LONG);toast.setText("暂时没有联系人请添加!");toast.show();}else{//第一个cursor.moveToFirst();names.add(cursor.getString(1));tels.add(cursor.getString(2));//下一个直到没有while(cursor.moveToNext()){names.add(cursor.getString(1));tels.add(cursor.getString(2));}madapter.notifyDataSetChanged();//动态更新cursor.close();db.close();}searchBt=(ImageView)findViewById(R.id.imgsearch);searchEt=(EditText)findViewById(R.id.etSearch);searchEt.addTextChangedListener(new MaxLengthWatcher(8,searchEt,this));searchBt.setClickable(true);//激活按钮//完成搜索功能searchBt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {myHelper=new MyHelper(MainActivity.this);db=myHelper.getWritableDatabase();names.clear ();tels.clear();Cursor cursor=db.query("information",null,"name=?",new String[]{searchEt.getText().toString()},null,null,null);if(cursor.getCount()!=0){cursor.moveToFirst();names.add(cursor.getString(1));tels.add(cursor.getString(2));while(cursor.moveToNext()){names.add(cursor.getString(1));tels.add(cursor.getString(2));}}else{cursor=db.query("information",null,null,null,null,null,null);Toast toast=Toast.makeText(MainActivity.this,"抱歉,未发现该联系人!",Toast.LENGTH_LONG);toast.setText("抱歉,未发现该联系人!");toast.show();}madapter.notifyDataSetChanged();cursor.close();db.close();}});//点击事件 并传入参数mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Intent intent = new Intent(MainActivity.this, Change.class);intent.putExtra("nameInt",names.get(position));intent.putExtra("telInt",tels.get(position));startActivity(intent);}});//长按事件 删除数据mlistview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Override//长按删除public boolean onItemLongClick(AdapterView<?> arg0, View arg1,final int arg2, long arg3) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setPositiveButton("删除", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {db=myHelper.getWritableDatabase();db.delete("information","name=?",new String[]{names.get(arg2)});db.close();names.remove(arg2);tels.remove(arg2);madapter.notifyDataSetChanged();}});builder.create().show();return true; // 这里一定要改为true,代表长按自己消费掉了,若为false,触发长按事件的同时,还会触发点击事件</span></strong>}});}//适配器创建class MyBaseAdapter extends BaseAdapter{@Overridepublic int getCount() {return names.size();}@Overridepublic Object getItem(int position) {return names.get(position);}@Overridepublic long getItemId(int position) {return position;}@Override//读取数据并显示public View getView(int position, View convertView, ViewGroup parent) {View view=View.inflate(MainActivity.this,R.layout.tel,null);TextView mtextView=(TextView) view.findViewById(R.id.textView);mtextView.setText(" "+names.get(position)+" : "+tels.get(position));return view;}}@Override
//创建菜单public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);getMenuInflater().inflate( R.menu.main , menu);return true;}//跳转新建联系人页面public boolean onOptionsItemSelected(MenuItem item){if(item.getItemId()==R.id.action_settings) {Intent intent = new Intent(MainActivity.this,Tels_new.class);startActivity(intent);}return super.onOptionsItemSelected(item);}}
完整项目链接
完整项目下载链接
Android电话本实现相关推荐
- android电话本导入iphone,换手机之后安卓通讯录怎么导入iphone手机
当手机行业高速发展,很多人都会从安卓手机换到iphone手机,换手机最大的问题便是通讯录的问题,今天就和大家分享下安卓通讯录怎么导入iphone 软件名称:微信电话本(原QQ通讯录) for andr ...
- android电话本备份至iphone,苹果手机怎么备份通讯录联系人到电脑?电话本备份与恢复教程...
苹果手机怎么备份通讯录联系人到电脑?电话本备份与恢复教程.手机的通讯录号码没了,我们首先要想的就是在删除之前有没有备份过手机的通讯录号码数据,若没有备份,我们需要想办法将删除的数据恢复才对,因为手机通 ...
- android电话本导入iphone,怎么把安卓手机通讯录导入iphone?安卓手机通讯录导入苹果手机三大方法分享...
Android是一种基于Linux的自由及开放源代码的操作系统,也正因此安卓系统迅速扩大市场份额;最近很多人都在问怎么把安卓手机通讯录导入iphone?下面为你带来安卓手机通讯录导入苹果手机三大方法分 ...
- android通过ContentProvider 取得电话本的数据
2019独角兽企业重金招聘Python工程师标准>>> 先通过getContentResolver 方法来取得一个ContentResolver 对象,然后通过 其query 方法查 ...
- 大学生课程设计 ------ 安卓Android软件设计(电话本)
大学生课程设计 ------ 安卓Android软件设计(电话本) Android嵌入式软件设计课程(代码+课程报告) 基本效果如下(所有相关文件在文末链接给出): ----------------- ...
- 几款适用的Android手机软件:电子名片、OO信息、OO电话本
电子名片.OO信息.OO电话这三款软件由FOOM工作室制作.其最大优点在于方便用户使用,用户能很好的管理名片.短信.联系人.此软件主要功能为:手机间可以相互发送名片.邮件.拨打电话等功能.不多说了,直 ...
- Android发送短信(短信发送以及群发和从电话本选择联系人)---短信管家2
分析下怎么写 首先,我们需要一个输入框,可以手动的输入手机号码, 其次,很少有人愿意手动输入,那么我们需要提供一个按钮来给我们的用户选择自己电话本中的联系人(一次可以选择多个即群发) 然后,我们需要一 ...
- Android中读取电话本Contacts联系人的所有电话号信息
1.首先,要知道android 的contacts里的电话信息有多类:moblie,家庭,工作,传真等.如图: 2.android的Contacts是通过ContentProvider来提供的,其实a ...
- Android绑定系统图标,类似各种电话本的绑定图标功能
这是一篇我个人在EOE发的帖子<绑定系统图标,类似各种电话本的绑定图标功能>,由于eoe的blog系统实在是无言以对,我就把eoe上面的帖子以及blog是都转到csdn上来,原帖地址:ht ...
- android:查询数据库 指定列 指定列名 并输出查询结果(如查询电话本,SMS的ContentResolver提供的)
如查询电话本,SMS的ContentResolver提供的cursor = getContentResolver().query(Uri.parse("content://sms/inbox ...
最新文章
- 机器学习在热门微博推荐中的应用
- 会话跟踪技术Cookieless
- HTTP 加速器 Varnish
- java 对外提供接口_Java服务器对外提供接口以及Android端向服务器请求数据
- Know more about RAC GES STATISTICS
- HDLBits答案(12)_Verilog移位寄存器
- 数据结构 | 链表:1097 删除重复元素
- jQuery datepicker和jQuery validator 共用时bug
- 【剑指offer】面试题23:链表中环的入口节点
- 名片识别信息分类python_python体验名片识别OCR
- Python机器学习:评价分类结果006precisoion-Recall曲线绘制
- centos7 mysql8 主从_CentOS7开启MySQL8主从备份、每日定时全量备份(推荐)
- 批量删除和修改特定前缀的mysql表
- python3的字符串操作
- Android可折叠收缩伸展的Expandable分组RecyclerView:模型抽象和封装(二)
- cocos2dx游戏中添加背景音乐、音效
- markdown编辑器推荐(附官网)
- 3dmax文件格式转换——.max 转换为 .flt(解决转换后.flt没有纹理贴图的问题)
- python打开一个不存在的文件报错,python中的文件操作(一)
- ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge 状压DP