吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4784|回复: 7
收起左侧

[其他转载] 实现简单的通讯录

[复制链接]
Darren_Smith 发表于 2019-11-12 19:27
拨打电话app的设计与实现说明文档

一、软件名称
        拨打电话与发短信app
二、软件内容简介
【说明】:
模仿小米手机的拨打电话功能,由于电脑的问题,无法授予androidstudio安装app在手机,只能安装在手机模拟器中,所以无法实现真正的拨打电话和发送短信,只能用提示信息模拟
【功能】:
1、主界面只显示联系人的名字,点进去才能显示全部信息,并可以选择拨打电话或是发送短信功能,页面简洁,迎合正常人的使用习惯
2、返回键退出程序时,不直接退出,先提醒用户是否退出
3、通信录的右下角有一个“+”的按钮,点击便可以添加新联系人
4、长按主界面的联系人便可删除
【知识归纳】:
1、用intent实现activity的跳转
2、用listview实现批量信息的展示
3、用sqlite数据库存储联系人信息,并实现增删功能
4、用ContextMenu实现长按删除listview某个项的功能
5、用onKeyDown提示用户是否退出程序

三、代码实现
(一)JAVA代码
(1)AddUserActivity
package cn.itcast.phoneclient3;

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AddUserActivity extends AppCompatActivity implements View.OnClickListener{

    private MyDatabaseHelper dbHelper;
    private EditText username,telnumber;
    private Button ok_add,create_database;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_user);

        dbHelper = new MyDatabaseHelper(this,"User2.db",null,1);

        username = (EditText) findViewById(R.id.add_user_name);
        telnumber = (EditText) findViewById(R.id.add_user_telnumber);
        ok_add = (Button) findViewById(R.id.ok_add);
        ok_add.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

            case R.id.ok_add:{
                String name = username.getText().toString();
                String tel_number = telnumber.getText().toString();
                if(name == null || tel_number == null){
                    Toast.makeText(this,"用户名和电话不能为空!",Toast.LENGTH_SHORT).show();
                }else{
                    SQLiteDatabase db = dbHelper.getWritableDatabase();
                    ContentValues values = new ContentValues();
                    values.put("name",name);
                    values.put("telnumber",tel_number);
                    db.insert("User2",null,values);
                    values.clear();
                    Toast.makeText(this,"添加成功!", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(AddUserActivity.this,MainActivity.class);
                    startActivity(intent);
                    this.finish();
                    db.close();
                }
            }
        }
    }
}




(2)MainActivity
package cn.itcast.phoneclient3;

import android.bluetooth.BluetoothManager;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private MyDatabaseHelper dbHelper;
    private List<User> UserList = new ArrayList<>();
    private ImageButton addUser;
    UserAdapter adapter;
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        addUser = (ImageButton) findViewById(R.id.addUser);
        addUser.setOnClickListener(this);

        dbHelper = new MyDatabaseHelper(this,"User2.db",null,1);

        //初始化数据
        initUser();
        adapter = new UserAdapter(MainActivity.this,
                R.layout.user_item,UserList);
        listView = (ListView) findViewById(R.id.user_list);
        //为 ListView 的所有 item 注册 ContextMenu
        this.registerForContextMenu(listView);

        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent,View view,
                                    int position,long id){
                User user = UserList.get(position);
                String name = user.getName();
                String telnumber = user.getTelnumber();
                Intent intent = new Intent(MainActivity.this,UserActivity.class);
                intent.putExtra("name",name);
                intent.putExtra("telnumber",telnumber);
                startActivity(intent);
            }
        });
    }


    private void initUser(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Cursor cursor = db.query("User2",null,null,null,null,null,null);
        if(cursor.moveToFirst()){
            do{
                //遍历
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String telnumber = cursor.getString(cursor.getColumnIndex("telnumber"));
                User user = new User(name,telnumber,R.mipmap.ic_launcher);
                UserList.add(user);
            }while(cursor.moveToNext());
        }
        cursor.close();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.addUser:{
                Intent intent = new Intent(MainActivity.this,AddUserActivity.class);
                startActivity(intent);
                this.finish();
            }
            break;
        }
    }
    //实现长按删除功能
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)
        {
            new AlertDialog.Builder(this).setTitle("系统提示").setMessage("确定退出通信录吗").setPositiveButton("确定", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    android.os.Process.killProcess(android.os.Process.myPid());
                }
            }).setNegativeButton("取消", null).show();
            return true;
        }
        else if(keyCode== KeyEvent.KEYCODE_MENU && event.getRepeatCount()==0)
        {
            openOptionsMenu();
            return true;
        }
        return true;
    }
    public void onCreateContextMenu(ContextMenu menu,View view,ContextMenu.ContextMenuInfo menuInof)

    {
        super.onCreateContextMenu(menu, view, menuInof);
        menu.add(0,1,Menu.NONE,"删除");
    }

    public boolean onContextItemSelected(MenuItem item)
    {
        AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch(item.getItemId())
        {
            case 1:
                //删除列表项...
                int pos=(int)listView.getAdapter().getItemId(menuInfo.position);
                if(UserList.remove(pos)!=null){//这行代码必须有

                    SQLiteDatabase db = dbHelper.getWritableDatabase();
                    ContentValues values = new ContentValues();
                    String st=Integer.toString(pos+1);
                    String s="DELETE FROM User2 WHERE ID = "+st;
                    db.execSQL(s);
                    db.close();
                    Toast.makeText(this,"删除成功!", Toast.LENGTH_SHORT).show();
                }else {
                    System.out.println("failed");
                }
                adapter.notifyDataSetChanged();//刷新view
                break;
            default:
                return super.onContextItemSelected(item);
        }
        return true;
    }
}

(3)MessageActivity
package cn.itcast.phoneclient3;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MessageActivity extends AppCompatActivity {
    private Button bt;
    private TextView et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message);
        bt=(Button)findViewById(R.id.button);
        et=(TextView) findViewById(R.id.ev1);
        Intent intent = getIntent();
        String telephone = intent.getStringExtra("telnumber");
        et.setText(telephone);
    }
    public void click(View view){
        Toast.makeText(this,"发送成功...",Toast.LENGTH_SHORT).show();
    }
}

(4)MyDataBaseHelper.java
package cn.itcast.phoneclient3;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

/**
* Created by xiaomo on 2019/11/11.
*/
public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final String Create_User_Table = "create table User2 ("
            + "name text,"
            + "telnumber text)";

    private Context mContext;

    public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,
                            int version){
        super(context,name,factory,version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(Create_User_Table);
        Toast.makeText(mContext,"创建成功",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
(5)phoneActivity
pack package cn.itcast.phoneclient3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class phoneActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_phone);
    }
}
(6)User.java
package cn.itcast.phoneclient3;

/**
* Created by xiaomo on 2019/11/11.
*/
public class User {
    private int imgId;
    private String name;
    private String telnumber;

    public User(String name,String telnumber,int imgId){
        this.name = name;
        this.telnumber = telnumber;
        this.imgId = imgId;
    }

    public int getImgId(){
        return imgId;
    }

    public String getName(){
        return name;
    }

    public String getTelnumber(){
        return telnumber;
    }
}
(7)UserActivity
package cn.itcast.phoneclient3;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class UserActivity extends AppCompatActivity implements View.OnClickListener{

    private TextView name,telnumber;
    private Button bt1,bt2;
    String user_name;
    String telephone;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);

        name = (TextView) findViewById(R.id.text_name);
        telnumber = (TextView) findViewById(R.id.text_number);
        bt1=(Button)findViewById(R.id.button1);
        bt2=(Button)findViewById(R.id.button2);
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        Intent intent = getIntent();
        user_name = intent.getStringExtra("name");
        name.setText(user_name);
        telephone = intent.getStringExtra("telnumber");
        telnumber.setText(telephone);

    }
    public void onClick(View v){
        switch(v.getId()) {
            case R.id.button1:
                Intent intent1=new Intent(UserActivity.this,phoneActivity.class);
                startActivity(intent1);
                break;
            case R.id.button2:
                Intent intent2=new Intent(UserActivity.this,MessageActivity.class);
                intent2.putExtra("name",user_name);
                intent2.putExtra("telnumber",telephone);
                startActivity(intent2);
                break;
        }
    }

}
(8)UserAdapter.java
package cn.itcast.phoneclient3;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.List;

/**
* Created by xiaomo on 2019/11/11.
*/
public class UserAdapter extends ArrayAdapter<User> {
    private int resourceId;

    public UserAdapter(Context context, int textViewResourceId, List<User> objects){
        super(context,textViewResourceId,objects);
        resourceId = textViewResourceId;
    }

    @Override
    public View getView(int position,View converView,ViewGroup parent){
        User user = getItem(position);//获取当前User实例
        View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
        ImageView userimg = (ImageView) view.findViewById(R.id.user_img);
        TextView username = (TextView) view.findViewById(R.id.user_name);

        userimg.setImageResource(user.getImgId());
        username.setText(user.getName());

        return view;
    }

}

(二)界面布局
(1)activity_add_user.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="cn.itcast.phoneclient3.AddUserActivity">


    <EditText
        android:id="@+id/add_user_name"
        android:hint="姓名"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/add_user_telnumber"
        android:hint="电话号码"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/add_user_name"/>

    <Button
        android:id="@+id/ok_add"
        android:text="添加"
        android:textSize="18dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/add_user_telnumber"/>



</RelativeLayout>
(2)activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cn.itcast.phoneclient3.MainActivity">
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="联系人"
        android:layout_centerHorizontal="true"
        android:textSize="30dp"
        />

    <ListView
        android:id="@+id/user_list"
        android:layout_below="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>
    <ImageButton
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:id="@+id/addUser"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:background="@drawable/add"
            />

</RelativeLayout>

(3)activity_message.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="cn.itcast.phoneclient3.MessageActivity">
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发给"
        android:textSize="30dp"
        />
    <TextView
        android:id="@+id/ev1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv1"
        />
    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ev1"
        android:text="内容"
        android:textSize="30dp"
        />
    <EditText
        android:id="@+id/ev2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv2"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="click"
        />
</RelativeLayout>

(4)activity_phone.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="cn.itcast.phoneclient3.phoneActivity">
    <ImageView
        android:id="@+id/imv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/phone"
        />
</RelativeLayout>

(5)activity_user.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="cn.itcast.phoneclient3.UserActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="联系人详细情况"
        android:layout_centerHorizontal="true"
        android:textSize="30dp"
        android:id="@+id/textView3" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="92dp"
        android:text="姓名"
        android:textSize="20dp"
        android:layout_marginLeft="70dp"
        android:layout_marginStart="39dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/textView"
        android:layout_alignRight="@+id/textView"
        android:layout_below="@+id/textView"
        android:layout_marginTop="29dp"
        android:text="电话"
        android:textSize="20dp"/>

    <TextView
        android:id="@+id/text_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/textView"
        android:layout_marginLeft="49dp"
        android:layout_marginStart="49dp"
        android:layout_toEndOf="@+id/textView"
        android:layout_toRightOf="@+id/textView"
        android:textSize="20dp"/>

    <TextView
        android:id="@+id/text_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignStart="@+id/text_name"
        android:layout_alignLeft="@+id/text_name"
        android:layout_alignRight="@+id/text_name"
        android:textSize="20dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打电话"
        android:id="@+id/button1"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/textView3"
        android:layout_alignStart="@+id/textView3" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发短信"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button1"
        android:layout_toRightOf="@+id/button1"
        android:layout_toEndOf="@+id/button1"
        android:layout_marginLeft="44dp"
        android:layout_marginStart="44dp" />
</RelativeLayout>

(6)user_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/user_img"
        android:layout_marginLeft="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/user_name"
        android:textSize="18dp"
        android:layout_marginLeft="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/user_img"/>



</RelativeLayout>

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

VinceLin09 发表于 2021-6-4 20:52
现在还有这个项目吗,可以把包分享给我吗
z506820187 发表于 2019-12-30 08:48
 楼主| Darren_Smith 发表于 2019-12-10 20:14
z506820187 发表于 2019-12-9 09:12
兄弟你这发源码也太累了,不如发文件,我这个老手都要粘贴部署环境半天,新手就更不知道如何操作了,并且你 ...

好的,下次发文件哈
z506820187 发表于 2019-12-9 09:12
兄弟你这发源码也太累了,不如发文件,我这个老手都要粘贴部署环境半天,新手就更不知道如何操作了,并且你的依赖项也没发,很容易报错,运行失败
 楼主| Darren_Smith 发表于 2019-12-8 10:30
1.用sqlite自带的函数db.delete
2.不用id来定位,改用title定位
【新代码】:
                        String whereClause = "title=?";
                    String[] whereArgs = {delete_str};
                    db.delete("Notebook",whereClause,whereArgs);
有名小卒 发表于 2019-12-6 00:06
String s="DELETE FROM User2 WHERE ID = "+st;
                    db.execSQL(s);
这里会报错,删除联系人就闪退,请问解决了吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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