玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...
項目的Github地址:https://github.com/ggrcwxh/LastTime
采用基于git的多人協作開發模式
軟件采用mvc設計模式,前端這么藝術的事我不太懂,交給斌豪同學去頭疼了。第一輪先實現查詢通話記錄返回對應號碼上一次的通話時間。
真機測試下的效果圖:顯示稱呼和上一次通話距離現在的時間,單位小時
API接口:
?首先需要創建一個LastTimeDatabaseHelper的對象來創建數據庫,建議創建在mainActivity下,創建建議格式如下,傳入參數為全局Context;數據庫名;允許返回自定義的Cursor,一般填null,當前數據庫版本號
public LastTimeDatabaseHelper dbHelper= new LastTimeDatabaseHelper(MyApplication.getContext(),"lasttime.db",null,1);關于設置親情號碼:建議格式如下:傳入參數分別為稱呼,電話號碼,以及dbHelper
KithAndKinService test =new KithAndKinService("mother","111111",dbHelper); test.insertToDatabase();關于刪除親情號碼:建議格式如下:傳入參數為稱呼以及dbHelper
KithAndKinService test2 =new KithAndKinService("mother",dbHelper);test2.deleteInDatabase()
?關于更新數據庫通話記錄時間,建議格式如下:
CallInfoService call = new CallInfoService(dbHelper); call.getCallInfos(); call.dataProcessing();關于查看上一次通話記錄時間,建議格式如下,l1為上次通話時間-1970年1月1日 的時長的毫秒數,請在activity上獲取當前時間再減去l1,建議獲取方法System.currentTimeMillis()
KithAndKinService test3 =new KithAndKinService("mother",dbHelper); Map<String,String> map1 = test3.seleteInDatabase(); long l1 = Long.valueOf(map1.get("date"));?
實現方法:
因為我不寫activity,那么我寫的功能就要脫離activity了。那么首先要做的就是獲取全局Context。
實現的話挺簡單的,就是要先理解Context的含義,我是通過看http://www.jianshu.com/p/94e0f9ab3f1d(Context都沒弄明白,還怎么做Android開發?)這篇簡書理解的。不是主要玩安卓開發的,碰到安卓這些特性還是挺頭疼的。實現方法就是寫一個Application的子類,然后修改AndroidMainifest.xml。公式化的方法了。實現后就可以通過調用,MyApplication.getContext()獲取全局Context了,具體代碼如下:
1 public class MyApplication extends Application { 2 private static Context context; 3 @Override 4 public void onCreate(){ 5 context=getApplicationContext(); 6 } 7 public static Context getContext() { 8 return context; 9 } 10 } 1 android:name=".MyApplication"//在<application></application>中插入然后就是建立數據庫了,用安卓內置的SQLite。講道理,一般用Litepal來操縱數據庫會簡單很多,但話又說回來了,我又不是主玩安卓開發的,學習這東西還是從底層開始比較容易懂,所以這里用SQLiteDatabase來操控數據庫。
建立數據庫:公式化的方法,兩個方法是重寫SQLiteOpenHelper里的方法,一個用在創建整個數據庫的時候,一個用在給數據庫升級的時候(比如插入新表)。
1 public class LastTimeDatabaseHelper extends SQLiteOpenHelper{ 2 public static final String CREATE_KITH_AND_KIN = "create table KITH_AND_KIN (" 3 + "call text primary key, " 4 +"num text," 5 +"date integer)"; 6 7 public LastTimeDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 8 super(context,name,factory,version); 9 10 } 11 12 @Override 13 public void onCreate(SQLiteDatabase sqLiteDatabase) { 14 sqLiteDatabase.execSQL(CREATE_KITH_AND_KIN); 15 } 16 17 @Override 18 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 19 20 } 21 }?增刪改查:主要是采用SQLiteDatabase提供的insert()等方法
public class KithAndKinService {private String call;
private String num;
private long date;
private LastTimeDatabaseHelper dbHelper;
public KithAndKinService(String call,String num,long date,LastTimeDatabaseHelper dbHelper) {
this.call=call;
this.num=num;
this.date=date;
this.dbHelper=dbHelper;
}
public KithAndKinService(String call, String num, LastTimeDatabaseHelper dbHelper) {
this.call=call;
this.num=num;
this.dbHelper=dbHelper;
}
public KithAndKinService(String call,LastTimeDatabaseHelper dbHelper)
{
this.call=call;
this.dbHelper=dbHelper;
}
public KithAndKinService(String call,long date,LastTimeDatabaseHelper dbHelper){
this.call=call;
this.date=date;
this.dbHelper=dbHelper;
}
public KithAndKinService(LastTimeDatabaseHelper dbHelper)
{
this.dbHelper=dbHelper;
}
public void insertToDatabase(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("call",call);
values.put("num",num);
if(date!=0)
{
values.put("date",date);
}
db.insert("KITH_AND_KIN",null,values);
}
public void deleteInDatabase(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("KITH_AND_KIN","call=?",new String[] {call});
}
public Map<String,String> seleteInDatabase(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
String temp = "call=?";
String[] temp2 ={call};
String[] temp3 ={"call","num","date"};
Cursor cursor = db.query("KITH_AND_KIN",temp3,temp,temp2,null,null,null);
Map<String,String> map = new HashMap<String,String>();
if (cursor != null && cursor.moveToFirst())
{
map.put("call",cursor.getString(0));
map.put("num",cursor.getString(1));
map.put("date", String.valueOf(cursor.getLong(2)));
}
return map;
}
public List<Map<String,String>> seleteInDatabaseAll(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.query("KITH_AND_KIN",null,null,null,null,null,null);
List<Map<String,String>> list= new ArrayList<Map<String,String>>();
if (cursor != null && cursor.moveToFirst()) {
do {
Map<String,String> map = new HashMap<String,String>();
map.put("call",cursor.getString(cursor.getColumnIndex("call")));
map.put("num",cursor.getString(cursor.getColumnIndex("num")));
map.put("date",cursor.getString(cursor.getColumnIndex("date")));
list.add(map);
} while (cursor.moveToNext());
}
return list;
}
public void updateToDatabase(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("date",date);
db.update("KITH_AND_KIN",values,"call=?",new String[] {call});
}
}
?然后是讀取用戶的通話記錄
首先要權限
<uses-permission android:name="android.permission.READ_CALL_LOG" />?然后就是讀取通話記錄了:主要是讀取用resolver.query讀取通話記錄的數據庫,然后更新數據庫
public class CallInfoService {private List<CallInfo> callinfos = new ArrayList<CallInfo>();
private LastTimeDatabaseHelper dbHelper;
public List<CallInfo> getCallinfos() {
return callinfos;
}
public CallInfoService(LastTimeDatabaseHelper dbHelper){
this.dbHelper=dbHelper;
}
public void getCallInfos() {
ContentResolver resolver = MyApplication.getContext().getContentResolver();
Uri uri = CallLog.Calls.CONTENT_URI;
String[] projection = new String[]{
CallLog.Calls.NUMBER,
CallLog.Calls.DATE,
CallLog.Calls.TYPE
};
if (ActivityCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
return ;
}
Cursor cursor = resolver.query(uri, projection, null, null, null);
while (cursor.moveToNext()){
if(cursor.getInt(2)==2)//OUTGOING_TYPE=2
{
String number=cursor.getString(0);
long date = cursor.getLong(1);
boolean flag=false;
for(CallInfo attribute:callinfos)
{
if(attribute.getNumber().equals(number)) {
if(attribute.getDate()<date)
{
attribute.setDate(date);
flag=true;
break;
}
}
}
if(flag==false)
{
CallInfo temp = new CallInfo(number,date);
callinfos.add(temp);
}
}
}
cursor.close();
}
public void dataProcessing(){
KithAndKinService kaks = new KithAndKinService(dbHelper);
List<Map<String,String>> all= kaks.seleteInDatabaseAll();
for(CallInfo attribute : callinfos)
{
for(int i =0 ;i<all.size();i++)
{
if(attribute.getNumber().equals(all.get(i).get("num")))
{
KithAndKinService temp = new KithAndKinService(all.get(i).get("call"),all.get(i).get("num"),attribute.getDate(),dbHelper);
temp.updateToDatabase();
}
}
}
}
}
?下一節預告:讀取圖片exif信息,獲取拍攝日期經緯度,確定大致位置
轉載于:https://www.cnblogs.com/wkmocr/p/7676444.html
總結
以上是生活随笔為你收集整理的玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中os模块使用方法
- 下一篇: jdbc之连接Oracle的基本步骤