android +7与8开头的号码在拨号盘上搜索相互匹配

某些运营商,要求在拨号盘的DialerSearch上面,对于+7与8开头的号码要能够互相搜索:

1.查询“+7123456”这个号码,输入“8123456”也能够检索到。反之亦然。

2. 输入“8”,能匹配“8”开头的数字或者“TUV”开头的名字。

KK版本对DialerSearch有一定的修改,请参考FAQ11308 [DialerSearch] 在KK上如何实现+7与8开头的号码在拨号盘上搜索相互匹配。

修改的部分有XT and标识

1、修改ContactsProvider2.java

先添加定义

private int prevSearchNumberLengXXX = 0;

private static final String TEMP_DIALER_SEARCH_VIEW_XXX = "temp_dialer_search_view_xxx";

private static final String TEMP_DIALER_SEARCH_TABLE_XXX = "temp_dialer_search_table_xxx";

private static final String COMBINE_RESULT_VIEW_TABLE = "combine_result_view_table";

再修改

private Cursor queryDialerSearchSimple(SQLiteDatabase db, Uri uri) {

log(" DIALER_SEARCH_SIMPLE");

String filterParam = "";

String uriStr = uri.toString();

StringBuilder searchInfo = new StringBuilder();

if (uriStr.indexOf("dialer_search_number") > 0) {

String uriString = uri.toString();

int previous = 0;

int current;

while ((current = uriString.indexOf(‘/‘, previous)) > -1) {

previous = current + 1;

}

filterParam = uriString.substring(previous);

Log.i(TAG, "filterParam: "+filterParam);

} else {

return null;

}

//XT and

if(filterParam.startsWith("8") || filterParam.startsWith("+7")){

String filterParam2 = null;

if(filterParam.startsWith("8"))

filterParam2 = filterParam.substring(1);

else if(filterParam.startsWith("+7"))

filterParam2 = filterParam.substring(2);

String tempViewTableXXX = queryDialerSearchSimpleXXX(db, filterParam2);

String tempViewTable8XXX = queryDialerSearchSimple8XXX(db, filterParam);

Cursor result = combineTwoViewTable(db, tempViewTableXXX, tempViewTable8XXX);

return result;

}

//XT and end

String tempTable = "temp_ds_name_lookup_table_number" ;

String tempViewTable = "temp_ds_view_table_number";

String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,true);

Cursor searchResultCursor = null;

db.beginTransaction();

try {

if (prevSearchNumberLeng > 0) {

for (int tmpLeng=prevSearchNumberLeng;tmpLeng>0;tmpLeng--) {

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + tmpLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + tmpLeng);

}

}

db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);

db.execSQL("DROP TABLE IF EXISTS " + tempTable);

db.execSQL("CREATE TEMP TABLE " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + TEMP_DIALER_SEARCH_TABLE

+ " WHERE " + DialerSearchLookupColumns.IS_VISIABLE + "=1 AND " + DialerSearch.MATCHED_DATA_OFFSETS + " IS NOT NULL ");

db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");

db.execSQL("DROP TABLE IF EXISTS " + tempViewTable);

db.execSQL("CREATE TEMP TABLE " + tempViewTable

+ " AS SELECT " + DS_VIEW_NAME_COLUMNS

+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS

+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS

+ " FROM (SELECT * FROM " + TEMP_DIALER_SEARCH_VIEW

+ " WHERE " + DialerSearch.RAW_CONTACT_ID + " IN "

+ " (SELECT " + DsTempTableColumns.RAW_CONTACT_ID + " FROM " + tempTable + ") "

+ ") AS " + TEMP_BASEVIEW_ALIAS

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER

+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID

+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME

+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID

+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT

+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","

+ TEMP_TABLE_ALIAS_NUMBER + "."

+ DsTempTableColumns.NAME_TYPE + ","

+ DialerSearch.CALL_DATE);

searchResultCursor = db.rawQuery(

"SELECT " + DS_SEARCH_RESULTS_COLUMNS + " FROM " + tempViewTable

+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID

+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC,"

+ DialerSearch.SORT_KEY_PRIMARY + " COLLATE NOCASE",null);

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return searchResultCursor;

}

private Cursor queryDialerSearchIncrement(SQLiteDatabase db, Uri uri) {

//TO get filter parameter

log(" DIALER_SEARCH_INCREMENT");

String filterParam = "";

String uriStr = uri.toString();

if (uriStr.indexOf("dialer_search") > 0) {

String uriString = uri.toString();

int previous = 0;

int current;

while ((current = uriString.indexOf(‘/‘, previous)) > -1) {

previous = current + 1;

}

filterParam = uriString.substring(previous);

log("filterParam: "+filterParam);

} else {

Log.i(TAG, "filterParam is null");

return null;

}

if (filterParam.indexOf("init") > -1) { // the initial state of dialer search is call log list

int pos = filterParam.indexOf(‘#‘, 0);

mDisplayOrder = (int)(filterParam.charAt(pos+1) - ‘0‘);

mSortOrder = (int)((filterParam.charAt(filterParam.indexOf(‘#‘, pos+1)+1)) - ‘0‘);

/*

* Bug Fix by Mediatek Begin.

*   CR ID: ALPS00114597

*   Descriptions:

*/

while (prevSearchNumberLeng > 0) {

// current operation is delete all digit number

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + prevSearchNumberLeng);

prevSearchNumberLeng--;

}

/*

* Bug Fix by Mediatek End.

*/

if(prevSearchNumberLeng ==0 ){

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE);

db.execSQL("CREATE TEMP TABLE  " + TEMP_DIALER_SEARCH_TABLE

+ " AS SELECT "

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns._ID + " AS " + DialerSearchLookupColumns._ID + " ,"

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.DATA_ID + " AS " + DialerSearchLookupColumns.DATA_ID + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.RAW_CONTACT_ID + " AS " + DialerSearchLookupColumns.RAW_CONTACT_ID + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NAME_TYPE + " AS " + DialerSearchLookupColumns.NAME_TYPE + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.CALL_LOG_ID + " AS " + DialerSearchLookupColumns.CALL_LOG_ID + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NUMBER_COUNT + " AS " + DialerSearchLookupColumns.NUMBER_COUNT + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.IS_VISIABLE + " AS " + DialerSearchLookupColumns.IS_VISIABLE + ","

+ " (CASE WHEN " + DialerSearchLookupColumns.CALL_LOG_ID + " > 0 " + " AND " + DialerSearchLookupColumns.NAME_TYPE + "=" + DialerSearchLookupType.PHONE_EXACT

+ " THEN " + Tables.CALLS + "." + Calls.NUMBER

+ " ELSE " + Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NORMALIZED_NAME

+ " END) AS " + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + " AS " + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ " (CASE WHEN " + DialerSearchLookupColumns.CALL_LOG_ID + " > 0 " + " AND " + DialerSearchLookupColumns.NAME_TYPE + "=" + DialerSearchLookupType.PHONE_EXACT

+ " THEN " + Tables.CALLS + "." + Calls.NUMBER

+ " ELSE " + Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NORMALIZED_NAME_ALTERNATIVE

+ " END) AS " + DialerSearchLookupColumns.NORMALIZED_NAME_ALTERNATIVE + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS_ALTERNATIVE + " AS " + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS_ALTERNATIVE

+ " FROM " + Tables.DIALER_SEARCH

+ " LEFT JOIN " + Tables.CALLS

+ " ON " + Tables.CALLS + "." + Calls._ID + "=" + DialerSearchLookupColumns.CALL_LOG_ID

+ " WHERE " + DialerSearchLookupColumns.IS_VISIABLE + "=1");

String mViewColumns = getDialerSearchViewColumns(mDisplayOrder,mSortOrder);

db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_VIEW + "_rawid");

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW);

db.execSQL("CREATE TEMP TABLE  " + TEMP_DIALER_SEARCH_VIEW

+ " AS SELECT " + mViewColumns + " FROM " + Views.DIALER_SEARCH_VIEW);

db.execSQL("CREATE INDEX idx_" + TEMP_DIALER_SEARCH_VIEW + "_rawid ON "

+ TEMP_DIALER_SEARCH_VIEW + "(" + DialerSearch.RAW_CONTACT_ID + ")");

}

return db.rawQuery(

"SELECT " + DS_INIT_SEARCH_RESULTS_COLUMNS

+" FROM (SELECT " + DS_INIT_SEARCH_RESULTS_COLUMNS + ", " + DialerSearch.RAW_CONTACT_ID

+ " FROM " + TEMP_DIALER_SEARCH_VIEW

+ " WHERE " + DialerSearch.CALL_LOG_ID + " > 0 "

+ " ORDER BY " + DialerSearch.CALL_DATE + " )"

+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID

+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC", null);   // for call log only need to search number

} else if (filterParam.indexOf("null_input") > -1) {

while (prevSearchNumberLeng > 0) {

// current operation is delete all digit number

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + prevSearchNumberLeng);

prevSearchNumberLeng--;

}

return db.rawQuery(

"SELECT " + DS_INIT_SEARCH_RESULTS_COLUMNS

+" FROM (SELECT " + DS_INIT_SEARCH_RESULTS_COLUMNS + ", " + DialerSearch.RAW_CONTACT_ID

+ " FROM " + TEMP_DIALER_SEARCH_VIEW

+ " WHERE " + DialerSearch.CALL_LOG_ID + " > 0 "

+ " ORDER BY " + DialerSearch.CALL_DATE + " )"

+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID

+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC", null);

}

//XT and

if(filterParam.startsWith("8") || filterParam.startsWith("+7")){

String filterParam2 = null;

if(filterParam.startsWith("8"))

filterParam2 = filterParam.substring(1);

else if(filterParam.startsWith("+7"))

filterParam2 = filterParam.substring(2);

String tempViewTableXXX = queryDialerSearchIncrementXXX(db, filterParam2);

String tempViewTable8XXX = queryDialerSearchIncrement8XXX(db, filterParam);

Cursor result = combineTwoViewTable(db, tempViewTableXXX, tempViewTable8XXX);

return result;

}

//XT and end

//Check Input OR Delete

int numberCount = filterParam.length();

String baseLookUpTable,baseViewTable;

boolean deleteOperation = false;

if (prevSearchNumberLeng > numberCount) {

// current operation is delete number to search

db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + prevSearchNumberLeng);

deleteOperation = true;

}

prevSearchNumberLeng = numberCount;

//Check to input OR delete END

if (numberCount == 1) {

baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE);

baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW);

} else {

int idx = numberCount - 1;

baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE + idx);

baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW + idx);

}

String tempViewTable = TEMP_DIALER_SEARCH_VIEW + numberCount;

Cursor searchResultCursor = null;

db.beginTransaction();

try {

//TO CREATE NEW TEMP TABLE

if (deleteOperation == false) {

/* Create temp table from name_lookup table */

String tempTable = TEMP_DIALER_SEARCH_TABLE + numberCount;

boolean isFirstQuery = numberCount==1;

String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,isFirstQuery);

if(isFirstQuery){

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + baseLookUpTable

+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ DialerSearchLookupColumns.NAME_TYPE + ",‘"

+ filterParam + "‘" + ")");

}else{

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + baseLookUpTable

+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ DialerSearchLookupColumns.NAME_TYPE + ",‘"

+ filterParam + "‘" + ")");

}

db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);

db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");

//Use name_type AS order key.

//Name_type is just a flag to distinguish matched number and mismatched number

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempViewTable

+ " AS SELECT " + DS_VIEW_NAME_COLUMNS

+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS

+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS

+ " FROM (SELECT * FROM " + baseViewTable

+ " WHERE " + DialerSearch.RAW_CONTACT_ID

+ " IN (SELECT " + DsTempTableColumns.RAW_CONTACT_ID

+ " FROM " + tempTable + ") "

+ ") AS " + TEMP_BASEVIEW_ALIAS

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER

+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID

+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME

+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID

+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT

+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","

+ TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + ","

+ DialerSearch.CALL_DATE);

}

//GET RESULTE FROM NEW TEMP TABLE

searchResultCursor = db.rawQuery(

"SELECT " + DS_SEARCH_RESULTS_COLUMNS + " FROM " + tempViewTable

+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID

+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC,"

+ DialerSearch.SORT_KEY_PRIMARY + " COLLATE NOCASE",null);

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return searchResultCursor;

}

//XT and

private String queryDialerSearchIncrementXXX(SQLiteDatabase db, String filterParam) {

//TO get filter parameter

log(" DIALER_SEARCH_INCREMENT XXX");

String noResultXXX = "NA";

if (filterParam.length() == 0) {

while (prevSearchNumberLengXXX > 0) {

// current operation is delete all digit number

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE_XXX + prevSearchNumberLengXXX);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW_XXX + prevSearchNumberLengXXX);

prevSearchNumberLengXXX--;

}

if(prevSearchNumberLengXXX ==0 ){

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE_XXX);

db.execSQL("CREATE TEMP TABLE  " + TEMP_DIALER_SEARCH_TABLE_XXX

+ " AS SELECT "

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns._ID + " AS " + DialerSearchLookupColumns._ID + " ,"

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.DATA_ID + " AS " + DialerSearchLookupColumns.DATA_ID + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.RAW_CONTACT_ID + " AS " + DialerSearchLookupColumns.RAW_CONTACT_ID + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NAME_TYPE + " AS " + DialerSearchLookupColumns.NAME_TYPE + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.CALL_LOG_ID + " AS " + DialerSearchLookupColumns.CALL_LOG_ID + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NUMBER_COUNT + " AS " + DialerSearchLookupColumns.NUMBER_COUNT + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.IS_VISIABLE + " AS " + DialerSearchLookupColumns.IS_VISIABLE + ","

+ " (CASE WHEN " + DialerSearchLookupColumns.CALL_LOG_ID + " > 0 " + " AND " + DialerSearchLookupColumns.NAME_TYPE + "=" + DialerSearchLookupType.PHONE_EXACT

+ " THEN " + Tables.CALLS + "." + Calls.NUMBER

+ " ELSE " + Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NORMALIZED_NAME

+ " END) AS " + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + " AS " + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ " (CASE WHEN " + DialerSearchLookupColumns.CALL_LOG_ID + " > 0 " + " AND " + DialerSearchLookupColumns.NAME_TYPE + "=" + DialerSearchLookupType.PHONE_EXACT

+ " THEN " + Tables.CALLS + "." + Calls.NUMBER

+ " ELSE " + Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.NORMALIZED_NAME_ALTERNATIVE

+ " END) AS " + DialerSearchLookupColumns.NORMALIZED_NAME_ALTERNATIVE + ","

+ Tables.DIALER_SEARCH + "." + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS_ALTERNATIVE + " AS " + DialerSearchLookupColumns.SEARCH_DATA_OFFSETS_ALTERNATIVE

+ " FROM " + Tables.DIALER_SEARCH

+ " LEFT JOIN " + Tables.CALLS

+ " ON " + Tables.CALLS + "." + Calls._ID + "=" + DialerSearchLookupColumns.CALL_LOG_ID

+ " WHERE " + DialerSearchLookupColumns.IS_VISIABLE + "=1");

String mViewColumns = getDialerSearchViewColumns(mDisplayOrder,mSortOrder);

db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_VIEW_XXX + "_rawid");

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW_XXX);

db.execSQL("CREATE TEMP TABLE  " + TEMP_DIALER_SEARCH_VIEW_XXX

+ " AS SELECT " + mViewColumns + " FROM " + Views.DIALER_SEARCH_VIEW);

db.execSQL("CREATE INDEX idx_" + TEMP_DIALER_SEARCH_VIEW_XXX + "_rawid ON "

+ TEMP_DIALER_SEARCH_VIEW_XXX + "(" + DialerSearch.RAW_CONTACT_ID + ")");

}

return noResultXXX;

}

//Check Input OR Delete

int numberCount = filterParam.length();

String baseLookUpTable,baseViewTable;

boolean deleteOperation = false;

if (prevSearchNumberLengXXX > numberCount) {

// current operation is delete number to search

db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_TABLE_XXX + prevSearchNumberLengXXX);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE_XXX + prevSearchNumberLengXXX);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW_XXX + prevSearchNumberLengXXX);

deleteOperation = true;

}

prevSearchNumberLengXXX = numberCount;

//Check to input OR delete END

if (numberCount == 1) {

baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE_XXX);

baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW_XXX);

} else {

int idx = numberCount - 1;

baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE_XXX + idx);

baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW_XXX + idx);

}

String tempViewTable = TEMP_DIALER_SEARCH_VIEW_XXX + numberCount;

db.beginTransaction();

try {

//TO CREATE NEW TEMP TABLE

if (deleteOperation == false) {

/* Create temp table from name_lookup table */

String tempTable = TEMP_DIALER_SEARCH_TABLE_XXX + numberCount;

boolean isFirstQuery = numberCount==1;

String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,isFirstQuery);

if(isFirstQuery){

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + baseLookUpTable

+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ DialerSearchLookupColumns.NAME_TYPE + ",‘"

+ filterParam + "‘" + ")");

}else{

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + baseLookUpTable

+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ DialerSearchLookupColumns.NAME_TYPE + ",‘"

+ filterParam + "‘" + ")");

}

db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);

db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");

//Use name_type AS order key.

//Name_type is just a flag to distinguish matched number and mismatched number

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempViewTable

+ " AS SELECT " + DS_VIEW_NAME_COLUMNS

+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS

+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS

+ " FROM (SELECT * FROM " + baseViewTable

+ " WHERE " + DialerSearch.RAW_CONTACT_ID

+ " IN (SELECT " + DsTempTableColumns.RAW_CONTACT_ID

+ " FROM " + tempTable + ") "

+ ") AS " + TEMP_BASEVIEW_ALIAS

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER

+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID

+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME

+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID

+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT

+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","

+ TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + ","

+ DialerSearch.CALL_DATE);

}

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return tempViewTable;

}

private String queryDialerSearchIncrement8XXX(SQLiteDatabase db, String filterParam) {

//TO get filter parameter

log(" DIALER_SEARCH_INCREMENT 8XXX");

//Check Input OR Delete

int numberCount = filterParam.length();

String baseLookUpTable,baseViewTable;

boolean deleteOperation = false;

if (prevSearchNumberLeng > numberCount) {

// current operation is delete number to search

db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + prevSearchNumberLeng);

deleteOperation = true;

}

prevSearchNumberLeng = numberCount;

//Check to input OR delete END

if (numberCount == 1) {

baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE);

baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW);

} else {

int idx = numberCount - 1;

baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE + idx);

baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW + idx);

}

String tempViewTable = TEMP_DIALER_SEARCH_VIEW + numberCount;

db.beginTransaction();

try {

//TO CREATE NEW TEMP TABLE

if (deleteOperation == false) {

/* Create temp table from name_lookup table */

String tempTable = TEMP_DIALER_SEARCH_TABLE + numberCount;

boolean isFirstQuery = numberCount==1;

String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,isFirstQuery);

if(isFirstQuery){

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + baseLookUpTable

+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ DialerSearchLookupColumns.NAME_TYPE + ",‘"

+ filterParam + "‘" + ")");

}else{

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + baseLookUpTable

+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","

+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","

+ DialerSearchLookupColumns.NAME_TYPE + ",‘"

+ filterParam + "‘" + ")");

}

db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);

db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");

//Use name_type AS order key.

//Name_type is just a flag to distinguish matched number and mismatched number

db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempViewTable

+ " AS SELECT " + DS_VIEW_NAME_COLUMNS

+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS

+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS

+ " FROM (SELECT * FROM " + baseViewTable

+ " WHERE " + DialerSearch.RAW_CONTACT_ID

+ " IN (SELECT " + DsTempTableColumns.RAW_CONTACT_ID

+ " FROM " + tempTable + ") "

+ ") AS " + TEMP_BASEVIEW_ALIAS

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER

+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID

+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME

+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID

+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT

+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","

+ TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + ","

+ DialerSearch.CALL_DATE);

}

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return tempViewTable;

}

private String queryDialerSearchSimpleXXX(SQLiteDatabase db, String filterParam) {

log(" DIALER_SEARCH_SIMPLE XXX");

String tempTable = "temp_ds_name_lookup_table_number_XXX";

String tempViewTable = "temp_ds_view_table_number_XXX";

String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,true);

String noResult = "NA";

if(filterParam.length() == 0)

return noResult;

db.beginTransaction();

try {

if (prevSearchNumberLengXXX> 0) {

for (int tmpLeng=prevSearchNumberLengXXX;tmpLeng>0;tmpLeng--) {

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE_XXX + tmpLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW_XXX + tmpLeng);

}

}

db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);

db.execSQL("DROP TABLE IF EXISTS " + tempTable);

db.execSQL("CREATE TEMP TABLE " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + TEMP_DIALER_SEARCH_TABLE_XXX

+ " WHERE " + DialerSearchLookupColumns.IS_VISIABLE + "=1 AND " + DialerSearch.MATCHED_DATA_OFFSETS + " IS NOT NULL ");

db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");

db.execSQL("DROP TABLE IF EXISTS " + tempViewTable);

db.execSQL("CREATE TEMP TABLE " + tempViewTable

+ " AS SELECT " + DS_VIEW_NAME_COLUMNS

+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS

+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS

+ " FROM (SELECT * FROM " + TEMP_DIALER_SEARCH_VIEW_XXX

+ " WHERE " + DialerSearch.RAW_CONTACT_ID + " IN "

+ " (SELECT " + DsTempTableColumns.RAW_CONTACT_ID + " FROM " + tempTable + ") "

+ ") AS " + TEMP_BASEVIEW_ALIAS

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER

+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID

+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME

+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID

+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT

+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","

+ TEMP_TABLE_ALIAS_NUMBER + "."

+ DsTempTableColumns.NAME_TYPE + ","

+ DialerSearch.CALL_DATE);

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return tempViewTable;

}

private String queryDialerSearchSimple8XXX(SQLiteDatabase db, String filterParam) {

log(" DIALER_SEARCH_SIMPLE 8XXX");

String tempTable = "temp_ds_name_lookup_table_number" ;

String tempViewTable = "temp_ds_view_table_number";

String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,true);

db.beginTransaction();

try {

if (prevSearchNumberLeng > 0) {

for (int tmpLeng=prevSearchNumberLeng;tmpLeng>0;tmpLeng--) {

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + tmpLeng);

db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + tmpLeng);

}

}

db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);

db.execSQL("DROP TABLE IF EXISTS " + tempTable);

db.execSQL("CREATE TEMP TABLE " + tempTable

+ " AS SELECT " + mTableColumns

+ " FROM " + TEMP_DIALER_SEARCH_TABLE

+ " WHERE " + DialerSearchLookupColumns.IS_VISIABLE + "=1 AND " + DialerSearch.MATCHED_DATA_OFFSETS + " IS NOT NULL ");

db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");

db.execSQL("DROP TABLE IF EXISTS " + tempViewTable);

db.execSQL("CREATE TEMP TABLE " + tempViewTable

+ " AS SELECT " + DS_VIEW_NAME_COLUMNS

+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS

+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS

+ " FROM (SELECT * FROM " + TEMP_DIALER_SEARCH_VIEW

+ " WHERE " + DialerSearch.RAW_CONTACT_ID + " IN "

+ " (SELECT " + DsTempTableColumns.RAW_CONTACT_ID + " FROM " + tempTable + ") "

+ ") AS " + TEMP_BASEVIEW_ALIAS

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER

+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID

+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT

+ " LEFT JOIN "

+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME

+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID

+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT

+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","

+ TEMP_TABLE_ALIAS_NUMBER + "."

+ DsTempTableColumns.NAME_TYPE + ","

+ DialerSearch.CALL_DATE);

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return tempViewTable;

}

private Cursor combineTwoViewTable(SQLiteDatabase db, String viewTableXXX, String viewTable8XXX){

Log.d(TAG,"combineTwoViewTable, viewTableXXX:" + viewTableXXX + ".  viewTable8XXX: " + viewTable8XXX);

Cursor searchResultCursor = null;

if(viewTableXXX.equels("NA") || viewTableXXX == null){

db.beginTransaction();

try {

searchResultCursor = db.rawQuery(

"SELECT " + DS_SEARCH_RESULTS_COLUMNS + " FROM " + viewTable8XXX

+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID

+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC,"

+ DialerSearch.SORT_KEY_PRIMARY + " COLLATE NOCASE",null);

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return searchResultCursor;

}

db.beginTransaction();

try {

db.execSQL("DROP TABLE IF EXISTS " + COMBINE_RESULT_VIEW_TABLE);

db.execSQL("CREATE TEMP TABLE " + COMBINE_RESULT_VIEW_TABLE

+ " AS SELECT * FROM " + viewTableXXX

+ " UNION "

+ " SELECT * FROM " + viewTable8XXX);

searchResultCursor = db.rawQuery(

"SELECT " + DS_SEARCH_RESULTS_COLUMNS + " FROM " + COMBINE_RESULT_VIEW_TABLE

+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID

+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC,"

+ DialerSearch.SORT_KEY_PRIMARY + " COLLATE NOCASE",null);

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

return searchResultCursor;

}

//XT and end

2、修改DialerSearchController.java

@Override

protected void onQueryComplete(int token, Object cookie, Cursor cursor) {

log("[onQueryComplete]mIsShowLoadingTip:" + mIsShowLoadingTip);

if (mIsShowLoadingTip) {

showLoadingTips(mFragmentView, false, null, false);

}

Integer cnt = mSearchNumCntQ.poll();

if (cnt != null) {

mPrevQueryDigCnt = cnt.intValue();

}

log("+onQueryComplete");

final DialerSearchAdapter dialerSearchAdapter = mAdapter;

// Whenever we get a suggestions cursor, we need to immediately kick

// off another query for the complete list of contacts

if (cursor != null) {

log("[onQueryComplete]mIsLocaleChanging" + mIsLocaleChanging);

if (mIsLocaleChanging) {

cursor.close();

return;

}

mDialerSearchCursorCount = cursor.getCount();

log("[onQueryComplete]cursor count: " + mDialerSearchCursorCount);

String tempStr = mDigits.getText().toString();

if (tempStr != null && mDialerSearchCursorCount > 0) {

mNoResultDigCnt = 0;

/** M: New Feature Phone Landscape UI @{ */

if (mSearchTitle != null) {

mSearchTitle.setVisibility(View.GONE);

}

/** @ } */

// notify UI to update view only if the search digit count

// is equal to current input search digits in text view

// since user may input/delete quickly, the list view will

// be update continuously and take a lot of time

if (DialerSearchUtils.tripHyphen(tempStr).length() == mPrevQueryDigCnt) {

// Don‘t need to close cursor every time after query

// complete.

if (mOnDialerSearchResult != null) {

mOnDialerSearchResult

.onDialerSearchResult(obtainDialerSearchResult(mDialerSearchCursorCount));

}

dialerSearchAdapter.setResultCursor(cursor);

dialerSearchAdapter.changeCursor(cursor);

} else {

cursor.close();

}

} else {

if (mOnDialerSearchResult != null) {

mOnDialerSearchResult

.onDialerSearchResult(obtainDialerSearchResult(mDialerSearchCursorCount));

}

//XT and

//mNoResultDigCnt = mDigits.getText().length();

if(tempStr != null && (tempStr.startsWith("+") || tempStr.startsWith("+7") || tempStr.startsWith("8"))){

mNoResultDigCnt = 0;

}else{

mNoResultDigCnt = mDigits.getText().length();

}

log("[onQueryComplete]mNoResultDigCnt: " + mNoResultDigCnt);

//XT and end

cursor.close();

dialerSearchAdapter.setResultCursor(null);

/** M: New Feature Phone Landscape UI @{ */

if (mSearchTitle != null) {

if (mDigits.length() > 0) {

mSearchTitle.setText(R.string.no_match_call_log);

} else {

mSearchTitle.setText(R.string.no_call_log);

}

mSearchTitle.setVisibility(View.VISIBLE);

}

/** @ }*/

}

}

log("-onQueryComplete");

}

时间: 2024-08-05 23:40:37

android +7与8开头的号码在拨号盘上搜索相互匹配的相关文章

大牛耗时一年:深入探索 Android 包体积优化,共三万字建议收藏上

由于文章特别长,建议先收藏再阅读. 在 Android 性能优化的知识体系当中,包体积优化一直被排在优先级比较低的位置,从而导致很多开发同学对自身应用的大小并不重视.在项目发展的历程中,一般可划分为如下三个阶段:初创期 => 成长期 => 成熟期通常来说,当应用处于成长期的中后阶段时,才会考虑去做系统的包体积优化,因此,只有在这个阶段及之后,包体积优化带来的收益才是可观的. 那么,包体积优化能够给我们带来哪些 收益 呢?如何全面对应用的包体积进行 系统分析 及 针对性优化呢?在这篇文章中,我们

[Android Memory] App调试内存泄露之Context篇(上)

转载自:http://www.cnblogs.com/qianxudetianxia/p/3645106.html Context作为最基本的上下文,承载着Activity,Service等最基本组件.当有对象引用到Activity,并不能被回收释放,必将造成大范围的对象无法被回收释放,进而造成内存泄漏. 下面针对一些常用场景逐一分析. 1. CallBack对象的引用 先看一段代码: @Override protectedvoid onCreate(Bundle state){ super.o

android金阳光自动化测试——学习历程:电池续航上&&下

章节:自动化基础篇——电池续航自动化测试上&&下 网易云课堂: http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=878098&courseId=712011 http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=878099&courseId=7120

Android学习之listview的下拉刷新、上拉载入

本例是在上例的基础上完成的.本例实现的listview上拉载入.下拉刷新功能,是在开源网站上别人写好的listview,主要是对listview的控件进行重写,添加了footer和header. 1.listview_footer listview_footer是listview的底部. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http

Android Studio如何配置CURL指令一键打包apk上传至蒲公英

Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{ buildTypes { //配置apk名称 android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = getApkName() } } } } android{ } //------------以下代码用于配置一键上传蒲公

Android系统研究资料收集---站在前人的肩膀上

Android系统研究资料收集---站在前人的肩膀上 针对Android系统研究任务,收集高价值资料在本页更新 AuthBlog:秋城https://www.cnblogs.com/houser0323 目录 1 官方网站 2 书籍 3 一些开发者的博客 1 官方网站 Android Open Source Project Android开源项目的官网,关于AOSP的官方资料都在这里,内容丰富全面偏概念性,适合用来总览Android aosp项目的全貌.跟踪了解版本特性 中文官网:https:/

Android 开发总结之获取来电号码

创建一个广播事件接收者,并在清单文件中注册此文件,过滤意图为android.intent.action.PHONE_STATE在intellij中因为未提示还以为没有这个,其实是有的,增加权限android.permission.READ_PHONE_STATE <receiver android:name=".receiver.CallReceiver"> <intent-filter> <action android:name="androi

android 获取本机SMI卡号码

1 //获取手机号码 2 TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 3 String deviceid = tm.getDeviceId();//获取智能设备唯一编号 4 String te1 = tm.getLine1Number();//获取本机号码 5 String imei = tm.getSimSerialNumber();//获得SIM卡的序号 6

Android 手机的版本号 和 API 号码 匹配表?

版本号和 API  在我们写 AndroidMainfest.xml 的时候有点 搞不清楚. 整理一下, 以供参考 平时开发的话: 一般兼容到 10  也就是 Android 2.3.3. 这里 开发的时候一定要注意,因为Android  的兼容性是最头疼的问题!