Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 13

LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG

THỰC HÀNH LAB 6


Bài 1:
1/ Hình ảnh chạy ứng dụng
2/Code
a. MainActivity.java
package edu.huflit.project.btcontacts_w;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CallLog;
import android.provider.ContactsContract;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

Button mbtnDanhBa, mbtnLichSu;


ListView mlvDs;
ArrayList<String> list = new ArrayList<>();

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

//Find view
mbtnDanhBa = findViewById(R.id.btnDanhBa);
mbtnLichSu = findViewById(R.id.btnLichSu);
mlvDs = findViewById(R.id.listview);

//Create event onClick


mbtnDanhBa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getPhoneContacts();
}
});

mbtnLichSu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showHistory();
}
});
}

public void getPhoneContacts()


{
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.READ_CONTACTS}, 0);
}

ContentResolver contentResolver = getContentResolver();


Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
Log.i("CONTACT_PROVIDER_DEMO", "TOTAL # of Contacts :::" +
Integer.toString(cursor.getCount()));
if (cursor.getCount() > 0)
{
while (cursor.moveToNext())
{
@SuppressLint("Range") String contactName =
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Pho
ne.DISPLAY_NAME));
@SuppressLint("Range") String contactNumber =
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Pho
ne.NUMBER));
Log.i("CONTACT_PROVIDER_DEMO", "Contact Name :::" +
contactName + "Ph # :::" + contactNumber);
String personContact = contactName + " : " + contactNumber;
list.add(personContact);
}
}

//Adapter, set adapter


ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.support.constraint.R.layout.support_simple_spinner_dropdown_item,
list);
mlvDs.setAdapter(adapter);
}

@SuppressLint("Range")
public void showHistory()
{
list = new ArrayList<String>();
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.READ_CALL_LOG}, 0);
}

Uri uri = CallLog.Calls.CONTENT_URI;


String[] projection = new String[]{CallLog.Calls.DATE,
CallLog.Calls.NUMBER};
Cursor c = getContentResolver().query(uri, projection, null, null,
null);
Toast.makeText(this, Integer.toString(c.getCount()),
Toast.LENGTH_SHORT).show();
if (c.getCount() > 0)
{
while (c.moveToNext())
{{
String hisRecord = "";
hisRecord = hisRecord +
c.getString(c.getColumnIndex(CallLog.Calls.DATE));
hisRecord = hisRecord + ", sdt: " +
c.getString(c.getColumnIndex(CallLog.Calls.NUMBER));
list.add(hisRecord);
Toast.makeText(this, hisRecord, Toast.LENGTH_SHORT).show();
}
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.support.constraint.R.layout.support_simple_spinner_dropdown_item,
list);
mlvDs.setAdapter(adapter);
}

}
b. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/purple_200"
android:textSize="14sp"
android:textAllCaps="true"
android:text="Ứng dụng hiển thị danh bạ và lịch sử cuộc gọi" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="horizontal">

<Button
android:id="@+id/btnDanhBa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Hiển thị danh bạ" />

<Button
android:id="@+id/btnLichSu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Lịch sử cuộc gọi" />
</LinearLayout>

<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp" />
</LinearLayout>
Bài 2:
1/MainActivity.java
package edu.huflit.project.bt62;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

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

public class MainActivity extends AppCompatActivity {


EditText editTextTen, editTextNgaySinh;
Button btnThem, btnHienThi;
ListView mlvDs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Find view
editTextTen = findViewById(R.id.editTextTen);
editTextNgaySinh = findViewById(R.id.editTextNgaySinh);
btnThem = findViewById(R.id.btnThem);
btnHienThi = findViewById(R.id.btnHienthi);
mlvDs = findViewById(R.id.lvDs);

//Create event onClick


btnThem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values = new ContentValues();

values.put(DBHelper.TEN, editTextTen.getText().toString());
values.put(DBHelper.NGAYSINH,
editTextNgaySinh.getText().toString());
getContentResolver().insert(NhanVienProvider.CONTENT_URI,
values);
hienThiDuLieu();
}
});
}
@SuppressLint("Range")
public void hienThiDuLieu() {
String URI = "content://com.tqky.contentprovidercreate" +
"/NhanVien";
Uri NhanVien = Uri.parse(URI);
Cursor c = getContentResolver().query(NhanVien, null, null, null,
null);
if (c == null) {
return;
}
List<String> list = new ArrayList<>();
if(c.moveToFirst()){
while (!c.isAfterLast()) {
list.add(c.getString(c.getColumnIndex(DBHelper._ID)) +
"\r\n " +
c.getString(c.getColumnIndex(DBHelper.TEN)) +
"\r\n " +
c.getString(c.getColumnIndex(DBHelper.NGAYSINH)));
c.moveToNext();
}
}
ArrayAdapter<String> adapter = new
ArrayAdapter<>(getApplicationContext(), R.layout.lv_item, list);
mlvDs.setAdapter(adapter);
}
}
2/activitymain_xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_margin="10dp"
android:orientation="vertical"
tools:context=".MainActivity" >

<EditText
android:id="@+id/editTextTen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"

android:textSize="20sp"
android:padding="10dp"
android:textColor="@color/black"
android:textColorHint="#666666"
android:hint="Tên" />

<EditText
android:id="@+id/editTextNgaySinh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:textSize="20sp"
android:padding="10dp"
android:textColor="@color/black"
android:layout_marginTop="10dp"
android:textColorHint="#666666"
android:hint="Ngày sinh"/>

<Button
android:id="@+id/btnThem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Thêm" />

<Button
android:id="@+id/btnHienthi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Hiển thị tất cả" />

<ListView
android:id="@+id/lvDs"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"/>
</LinearLayout>
3/lv_item.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="wrap_content"
android:orientation="vertical">

<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="18sp"
android:text="content" />
</LinearLayout>
4/DBHelper.java
package edu.huflit.project.bt62;

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

public class DBHelper extends SQLiteOpenHelper {


@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(TAO_BANG_NHANVIEN);
}

private static final String TEN_DATABASE= "QuanLyNhanVien";


public static final String TEN_BANG_NHANVIEN = "NhanVien";
public static final String _ID = "_id";
public static final String TEN = "ten";
public static final String NGAYSINH = "ngaysinh";

public DBHelper(Context context) {


super(context, TEN_DATABASE, null, 1);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {

private static final String TAO_BANG_NHANVIEN = ""


+ "create table " + TEN_BANG_NHANVIEN + " ( "
+ _ID + " integer primary key autoincrement ,"
+ TEN + " text not null, "
+ NGAYSINH + " text not null );";

}
5/NhanVien.java
package edu.huflit.project.bt62;

public class NhanVien {


private long id;
private String Ten;

private String NgaySinh;

//

public NhanVien()
{

}
public NhanVien(long id, String ten, String ngaySinh) {
this.id = id;
Ten = ten;
NgaySinh = ngaySinh;
}

//
public long getId() {
return id;
}

public void setId(long id) {


this.id = id;
}

public String getTen() {


return Ten;
}

public void setTen(String ten) {


Ten = ten;
}

public String getNgaySinh() {


return NgaySinh;
}

public void setNgaySinh(String ngaySinh) {


NgaySinh = ngaySinh;
}

}
6/NhanVienProvider.java
package edu.huflit.project.bt62;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;

import java.util.HashMap;

public class NhanVienProvider extends ContentProvider {


// Tên package của ứng dụng, cũng là nơi để lưu dữ liệu dùng chung.
static final String PROVIDER_TEN = "com.tqky.contentprovidercreate";
static final String URI = "content://" + PROVIDER_TEN + "/NhanVien";
static final Uri CONTENT_URI = Uri.parse(URI);
private SQLiteDatabase db;
private static HashMap<String, String> NHANVIEN_PROJECTION_MAP;
// Quy định truy xuất đến bảng dữ liệu
static final int NHANVIEN = 1;
// Quy định truy xuất đến dòng dữ liệu thông qua ID
static final int NHANVIEN_ID = 2;
/*
* UriMatcher là cây Uri dùng để chứa các node là Uri.
* Khi khởi tạo ta cần truyền cho nó mã gốc.
*/
static final UriMatcher uriMatcher;
/*
* Khởi tạo UriMaticher chứa node Uri lấy tất cả dữ
* liệu và lấy theo id
*/
static{
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_TEN, "NhanVien", NHANVIEN);
uriMatcher.addURI(PROVIDER_TEN, "NhanVien/#", NHANVIEN_ID);
}
public boolean onCreate() {
Context context = getContext();
DBHelper dbHelper = new DBHelper(context);
// Truy xuất đọc, ghi file
db = dbHelper.getWritableDatabase();
return (db == null) ? false:true;
}
public int delete(Uri uri, String selection,
String[] selectionArgs) {
int count = 0;
// Lấy dữ liệu theo đúng Uri truyền vào
switch (uriMatcher.match(uri)){
case NHANVIEN:
// Xóa dòng dữ liệu theo điều kiện
count = db.delete(DBHelper.TEN_BANG_NHANVIEN,
selection, selectionArgs);
break;
case NHANVIEN_ID:
// Xóa dòng dữ liệu theo id và điều kiện
count = db.delete(DBHelper
.TEN_BANG_NHANVIEN,
DBHelper._ID + "="
+ uri.getPathSegments().get(1)
+ (!TextUtils.isEmpty(selection) ? " AND ("
+ selection + ')': ""), selectionArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
// Thông báo đã có 1 dòng dữ liệu đã thay đổi để đồng bộ dữ liệu.
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
public String getType(Uri uri) {
switch (uriMatcher.match(uri)) {
case NHANVIEN:
/*
* Loại trả về là danh sách dữ liệu
*/
return "vnd.android.cursor.dir/NhanVien";
case NHANVIEN_ID:
/*
* Loại trả về là 1 dòng dữ liệu
*/
return "vnd.android.cusor.item/NhanVien";
default:
throw new IllegalArgumentException("Unsupport URI " + uri);
}
}
public Uri insert(Uri uri, ContentValues values) {
// Thêm cơ sơ dữ liệu
long rowID = db.insert(DBHelper.TEN_BANG_NHANVIEN,
"", values);
if(rowID > 0){
// Trả về Uri đã thêm thành công
Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
// Thông báo đã có 1 dòng dữ liệu đã thay đổi để đồng bộ dữ
liệu.
getContext().getContentResolver().notifyChange(_uri, null);
return _uri;
}
throw new SQLException("Failed to add a record into " + uri);
}
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// Tạo đối tượng truy vấn dữ liệu
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
// Bảng cần thực hiện truy vấn
qb.setTables(DBHelper.TEN_BANG_NHANVIEN);
// Kiểm tra đối số truyền vào thuộc các lấy nào
switch (uriMatcher.match(uri)) {
case NHANVIEN:
qb.setProjectionMap(NHANVIEN_PROJECTION_MAP);
break;
case NHANVIEN_ID:
qb.appendWhere(DBHelper._ID +
"=" + uri.getPathSegments().get(1) );
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
// Thực hiện sắp xếp theo tên
if(sortOrder == null || sortOrder == ""){
sortOrder = DBHelper.TEN;
}
// Thực hiện truy vấn theo đối số truyền vào
Cursor c = qb.query(db, projection, selection, selectionArgs,
null, null, sortOrder);
// Đăng ký để xem có một Uri thay đổi
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int count = 0;
switch (uriMatcher.match(uri)){
case NHANVIEN:
// Cập nhập dữ liệu theo điều kiện
count = db.update(DBHelper.TEN_BANG_NHANVIEN,
values, selection,
selectionArgs);
break;
case NHANVIEN_ID:
// Cập nhập dữ liệu theo điều kiện và id
count = db.update(DBHelper.TEN_BANG_NHANVIEN,values,
DBHelper._ID + "=" +
uri.getPathSegments().get(1) + (!
TextUtils.isEmpty(selection) ?
" AND (" + selection + ')': ""), selectionArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
// Thông báo đã có 1 dòng dữ liệu đã thay đổi để đồng bộ dữ liệu.
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
}

You might also like