微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 在手机中预置联系人/Service Number

在手机中预置联系人/Service Number

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]

预置联系人/Service Number

此方法比较适合预置联系人的数目不是特别多的情况

联系人比较多的情况,请参考:FAQ12935 预置联系人之Vcard预置联系人


[SOLUTION]

本方案实现预置联系人(包含姓名、号码信息)至手机中;并保证该联系人是只读的,无法被删除/编辑。            

代码分为两部分:

Part One 将预置的联系人插入到数据库中;

Part Two 保证预置联系人只读,无法被编辑删

(在三个地方屏蔽对预置联系人进行编辑处理:联系人详情界面、联系人多选界面、新建联系人选择合并联系人时)。

【注意】

如果您不需要限制预置联系人的删除/编辑操作,加入Part One部分代码即可,并去掉第一步”新增函数“  中的语句:contactvalues.put(RawContacts.IS_SDN_CONTACT, -2);

Part One

1.新建PresetContactSIMportProcessor.java

Path: alps\packages\apps\Contacts\src\com\mediatek\contacts\simservice

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9


[size=1em]10


[size=1em]11


[size=1em]12


[size=1em]13


[size=1em]14


[size=1em]15


[size=1em]16


[size=1em]17


[size=1em]18


[size=1em]19


[size=1em]20


[size=1em]21


[size=1em]22


[size=1em]23


[size=1em]24


[size=1em]25


[size=1em]26


[size=1em]27


[size=1em]28


[size=1em]29


[size=1em]30


[size=1em]31


[size=1em]32


[size=1em]33


[size=1em]34


[size=1em]35


[size=1em]36


[size=1em]37


[size=1em]38


[size=1em]39


[size=1em]40


[size=1em]41


[size=1em]42


[size=1em]43


[size=1em]44


[size=1em]45


[size=1em]46


[size=1em]47


[size=1em]48


[size=1em]49


[size=1em]50


[size=1em]51


[size=1em]52


[size=1em]53


[size=1em]54


[size=1em]55


[size=1em]56


[size=1em]57


[size=1em]58


[size=1em]59


[size=1em]60


[size=1em]61


[size=1em]62


[size=1em]63


[size=1em]64


[size=1em]65


[size=1em]66


[size=1em]67


[size=1em]68


[size=1em]69


[size=1em]70


[size=1em]71


[size=1em]72


[size=1em]73


[size=1em]74


[size=1em]75


[size=1em]76


[size=1em]77


[size=1em]78


[size=1em]79


[size=1em]80


[size=1em]81


[size=1em]82


[size=1em]83


[size=1em]84


[size=1em]85


[size=1em]86


[size=1em]87


[size=1em]88


[size=1em]89


[size=1em]90


[size=1em]91


[size=1em]92


[size=1em]93


[size=1em]94


[size=1em]95


[size=1em]96


[size=1em]97


[size=1em]98


[size=1em]99


[size=1em]100


[size=1em]101


[size=1em]102


[size=1em]103


[size=1em]104


[size=1em]105


[size=1em]106


[size=1em]107


[size=1em]108


[size=1em]109


[size=1em]110


[size=1em]111


[size=1em]112


[size=1em]113


[size=1em]114


[size=1em]115


[size=1em]116


[size=1em]117


[size=1em]118


[size=1em]119


[size=1em]120


[size=1em]121


[size=1em]122


[size=1em]123


[size=1em]124


[size=1em]125


[size=1em]126


[size=1em]127


[size=1em]128


[size=1em]129


[size=1em]130


[size=1em]131


[size=1em]132


[size=1em]133


[size=1em]134


[size=1em]135


[size=1em]136


[size=1em]137


[size=1em]138


[size=1em]139


[size=1em]140


[size=1em]141


[size=1em]142


[size=1em]143


[size=1em]144


[size=1em]145


[size=1em]146


[size=1em]147


[size=1em]148


[size=1em]149


[size=1em]150


[size=1em]151


[size=1em]152


[size=1em]153


[size=1em]154


[size=1em]155


[size=1em]156


[size=1em]157


[size=1em]158


[size=1em]159


[size=1em]160


[size=1em]161


[size=1em]162


[size=1em]163


[size=1em]164


[size=1em]165


[size=1em]166


[size=1em]167


[size=1em]168


[size=1em]169


[size=1em]170


[size=1em]171


[size=1em]172


[size=1em]173


[size=1em]174


[size=1em]175


[size=1em]176


[size=1em]177


[size=1em]178


[size=1em]179


[size=1em]180


[size=1em]181


[size=1em]182


[size=1em]183


[size=1em]184


[size=1em]185


[size=1em]186


[size=1em]187


[size=1em]188


[size=1em]189


[size=1em]190


[size=1em]191


[size=1em]192


[size=1em]193


[size=1em]194


[size=1em]195


[size=1em]196


[size=1em]197


[size=1em]198


[size=1em]199


[size=1em]200


[size=1em]201


[size=1em]202


[size=1em]203


[size=1em]204


[size=1em]205


[size=1em]206


[size=1em]207


[size=1em]208


[size=1em]209


[size=1em]210


[size=1em]211


[size=1em]212


[size=1em]213


[size=1em]214


[size=1em]215


[size=1em]216


[size=1em]217


[size=1em]218


[size=1em]219


[size=1em]220


[size=1em]221


[size=1em]222


[size=1em]223


[size=1em]224


[size=1em]225


[size=1em]226


[size=1em]227


[size=1em]228


[size=1em]229


[size=1em]230


[size=1em]231


[size=1em]232


[size=1em]233


[size=1em]234


[size=1em]235


[size=1em]236


[size=1em]237

[size=1em][size=1em]package com.mediatek.contacts.simservice;

[size=1em]import com.mediatek.contacts.simservice.SIMProcessorManager.ProcessorCompleteListener;
[size=1em]import android.content.Context;
[size=1em]import android.content.Intent;
[size=1em]import android.util.Log;
[size=1em]import android.content.ContentProviderOperation;
[size=1em]import android.content.ContentValues;
[size=1em]import android.content.OperationApplicationException;
[size=1em]import android.database.Cursor;
[size=1em]import android.net.Uri;
[size=1em]import android.provider.ContactsContract;
[size=1em]import android.provider.ContactsContract.CommonDataKinds.Email; //for usim
[size=1em]import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
[size=1em]import android.provider.ContactsContract.CommonDataKinds.Phone;
[size=1em]import android.provider.ContactsContract.CommonDataKinds.StructuredName;
[size=1em]import android.provider.ContactsContract.Data;
[size=1em]import android.provider.ContactsContract.Groups;
[size=1em]import android.provider.ContactsContract.RawContacts;
[size=1em]import com.android.contacts.common.model.account.AccountType;
[size=1em]import android.os.RemoteException;
[size=1em]import java.util.ArrayList;
[size=1em]import com.mediatek.contacts.simservice.SIMProcessorManager.ProcessorCompleteListener;
[size=1em]import com.mediatek.contacts.simservice.SIMServiceUtils;
[size=1em]import com.mediatek.contacts.simservice.SIMServiceUtils.ServiceWorkData;
[size=1em]import com.mediatek.contacts.simcontact.SimCardUtils;
[size=1em]import com.mediatek.contacts.util.LogUtils;
[size=1em]import android.provider.ContactsContract.PhoneLookup;

[size=1em]public class PresetContactsImportProcessor extends SIMProcessorBase {
[size=1em]   private static final String TAG = "resetContactsImportProcessor";
[size=1em]    private static boolean sIsRunningNumberCheck = false;
[size=1em]    private static final int INSERT_PRESET_NUMBER_COUNT = xxx;         //预置联系人的个数
[size=1em]    private static final String INSERT_PRESET_NAME[]   = {"xxx1","xxx2",...}; //各预置联系人的姓名
[size=1em]    private static final String INSERT_PRESET_NUMBER[] = {"xxx1","xxx2",...};   //各预置联系人的号码

[size=1em]   private int mSlotId;
[size=1em]   private Context mContext;
[size=1em]   public PresetContactsImportProcessor(Context context, int slotId, Intent intent, ProcessorCompleteListener listener) {
[size=1em]       super(intent, listener);
[size=1em]       mContext = context;
[size=1em]       mSlotId = slotId;
[size=1em]   }

[size=1em]   @Override
[size=1em]   public int getType() {
[size=1em]       return SIMServiceUtils.SERVICE_WORK_IMPORT_PRESET_CONTACTS;
[size=1em]   }

[size=1em]   @Override
[size=1em]   public void doWork() {
[size=1em]       if (isCancelled()) {
[size=1em]           LogUtils.d(TAG, "[doWork]cancel import preset contacts work. Thread id=" + Thread.currentThread().getId());
[size=1em]           return;
[size=1em]       }
[size=1em]       importDefaultReadonlyContact();
[size=1em]   }
[size=1em]  
[size=1em]    private void importDefaultReadonlyContact(){
[size=1em]         Log.i(TAG, "isRunningNumberCheck before: " + sIsRunningNumberCheck);
[size=1em]         if (sIsRunningNumberCheck) {
[size=1em]            return;
[size=1em]         }
[size=1em]         sIsRunningNumberCheck = true;
[size=1em]         for(int i = 0;i < INSERT_PRESET_NUMBER_COUNT; i++) {
[size=1em]             Log.i(TAG, "isRunningNumberCheck after: " + sIsRunningNumberCheck);
[size=1em]             Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(INSERT_PRESET_NUMBER));
[size=1em]             Log.i(TAG, "getContactInfoByPhoneNumbers(), uri = " + uri);
[size=1em]             Cursor contactCursor = mContext.getContentResolver().query(uri,
[size=1em]                                new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID}, null, null, null);
[size=1em]                 try {
[size=1em]                 if (contactCursor != null && contactCursor.getCount() > 0) {
[size=1em]                  return;
[size=1em]                 } else {
[size=1em]                  final ArrayList operationList = new ArrayList();
[size=1em]                  ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
[size=1em]                  ContentValues contactvalues = new ContentValues();
[size=1em]                  contactvalues.put(RawContacts.ACCOUNT_NAME, AccountType.ACCOUNT_NAME_LOCAL_PHONE);
[size=1em]                  contactvalues.put(RawContacts.ACCOUNT_TYPE, AccountType.ACCOUNT_TYPE_LOCAL_PHONE);
[size=1em]                  contactvalues.put(RawContacts.INDICATE_PHONE_SIM, ContactsContract.RawContacts.INDICATE_PHONE);
[size=1em]                  contactvalues.put(RawContacts.IS_SDN_CONTACT, -2);
[size=1em]                  builder.withValues(contactvalues);
[size=1em]                  builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED);
[size=1em]                  operationList.add(builder.build());
[size=1em]                  builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
[size=1em]                  builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
[size=1em]                  builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
[size=1em]                  builder.withValue(Phone.TYPE, Phone.TYPE_MOBILE);
[size=1em]                  builder.withValue(Phone.NUMBER, INSERT_PRESET_NUMBER);
[size=1em]                  builder.withValue(Data.IS_PRIMARY, 1);
[size=1em]                  operationList.add(builder.build());

[size=1em]                  builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
[size=1em]                  builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
[size=1em]                  builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
[size=1em]                  builder.withValue(StructuredName.DISPLAY_NAME, INSERT_PRESET_NAME);
[size=1em]                  operationList.add(builder.build());

[size=1em]                  try {
[size=1em]                      mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
[size=1em]                  } catch (RemoteException e) {
[size=1em]                      Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
[size=1em]                  } catch (OperationApplicationException e) {
[size=1em]                      Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
[size=1em]                  }
[size=1em]             }
[size=1em]         } finally {
[size=1em]             // when this service start,but the contactsprovider has not been started yet.
[size=1em]             // the contactCursor perhaps null, but not always.(first load will weekup the provider)
[size=1em]             // so add null block to avoid nullpointerexception
[size=1em]             if (contactCursor != null) {
[size=1em]                  contactCursor.close();
[size=1em]             }
[size=1em]         } //END for
[size=1em]         Log.i(TAG, "isRunningNumberCheck insert: " + sIsRunningNumberCheck);
[size=1em]         sIsRunningNumberCheck = false;
[size=1em]      }
[size=1em]    }
[size=1em]}



  

2. 修改SIMServiceUtils.java

Path:alps\packages\apps\ContactsCommon\src\com\mediatek\contacts\simservice  

添加

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]public static final int SERVICE_WORK_IMPORT_PRESET_CONTACTS = 5;



3. 修改SIMProcessorManager.java

Path:alps\packages\apps\Contacts\src\com\mediatek\contacts\simservice

在SIMProcessorManager.java中createProcessor函数里添加

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5

[size=1em][size=1em]else if (workType == SIMServiceUtils.SERVICE_WORK_IMPORT_PRESET_CONTACTS) {
[size=1em]    processor = new PresetContactsImportProcessor(context, slotId, intent, listener);
[size=1em]}



4. 修改BooTCMpReceiver.java

Path:alps\packages\apps\Contacts\src\com\mediatek\contacts\simcontact

在BootCmpReceiver.java中添加如下方法:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9


[size=1em]10


[size=1em]11


[size=1em]12


[size=1em]13

[size=1em][size=1em]/**
[size=1em]* when boot complete,preset the service number directly.
[size=1em]*/
[size=1em]private void presetServiceNumber(Context context) {
[size=1em]    LogUtils.d(TAG, "presetServiceNumber");
[size=1em]    startSimService(context, -1, SIMServiceUtils.SERVICE_WORK_IMPORT_PRESET_CONTACTS);
[size=1em]}



5. 修改BootCmpReceiver.java

Path:alps\packages\apps\Contacts\src\com\mediatek\contacts\simcontact

在BootCmpReceiver.java中onReceive()方法

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9


[size=1em]10


[size=1em]11


[size=1em]12


[size=1em]13


[size=1em]14


[size=1em]15


[size=1em]16


[size=1em]17


[size=1em]18


[size=1em]19


[size=1em]20


[size=1em]21

[size=1em][size=1em]public void onReceive(Context context, Intent intent) {
[size=1em]    ... ...
[size=1em]    } else if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
[size=1em]        // fix ALPS01003520,when boot complete,remove the contacts if the
[size=1em]        // card of a slot has been removed
[size=1em]        if (!isPhbReady()) {
[size=1em]            processBootComplete(context);
[size=1em]        }
[size=1em]    }
[size=1em]    ... ...
[size=1em]}



修改为:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9


[size=1em]10


[size=1em]11


[size=1em]12


[size=1em]13


[size=1em]14


[size=1em]15


[size=1em]16


[size=1em]17


[size=1em]18


[size=1em]19


[size=1em]20


[size=1em]21


[size=1em]22


[size=1em]23


[size=1em]24


[size=1em]25


[size=1em]26


[size=1em]27


[size=1em]28


[size=1em]29

[size=1em][size=1em]public void onReceive(Context context, Intent intent) {
[size=1em]    ... ...
[size=1em]    } else if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
[size=1em]        // fix ALPS01003520,when boot complete,remove the contacts if the
[size=1em]        // card of a slot has been removed
[size=1em]        if (!isPhbReady()) {
[size=1em]            processBootComplete(context);
[size=1em]        }
[size=1em]  
[size=1em]         // [START] add for Preset service number
[size=1em]         presetServiceNumber(context);
[size=1em]         // [END]
[size=1em]     }
[size=1em]     ... ...
[size=1em]}



Part Two

1.  FileefaultContactListAdapter.java  

Path: alps\packages\apps\ContactsCommon\src\com\android\contacts\common\list

configureOnlyShowPhoneContactsSelection函数中如下语句:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5

[size=1em][size=1em]selection.append(Contacts.INDICATE_PHONE_SIM + "= ?");

[size=1em]selectionArgs.add("-1");



之后增加下面的代码

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]selection.append(" AND " + RawContacts.IS_SDN_CONTACT + " > -2");



2.  File:Contact.java  

Path: alps\packages\apps\ContactsCommon\src\com\android\contacts\common\model

增加如下函数:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7

[size=1em][size=1em]//add for Preset Contacts
[size=1em]public boolean isReadOnlyContact() {
[size=1em]    return mIsSdnContact == -2;
[size=1em]}



3.  File:ContactLoaderFragment.Java

Path:alps\packages\apps\contacts\src\com\android\contacts\detail

将isContactEditable函数修改为:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7

[size=1em][size=1em]public boolean isContactEditable() {
[size=1em]    // return mContactData != null && !mContactData.isDirectoryEntry() && !mContactData.isSdnContacts() && !mContactData.isInternationalDialNumber(); // before
[size=1em]    return mContactData != null && !mContactData.isDirectoryEntry() && !mContactData.isSdnContacts() && !mContactData.isInternationalDialNumber() && !mContactData.isReadOnlyContact() ; // after
[size=1em]}



4.File:ContactEntryListAdapter.java

Path:alps\packages\apps\contactscommon\src\com\android\contacts\common\list  

在文件最后增加以下代码:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9

[size=1em][size=1em]public boolean showReadOnlyContact = true;

[size=1em]public void setShowReadOnlyContact(boolean canDelete) {
[size=1em]    showReadOnlyContact = canDelete;
[size=1em]}



5.  File:ContactEntryListFragment.java  

Path:alps\packages\apps\contactscommon\src\com\android\contacts\common\list

添加代码:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5

[size=1em][size=1em]protected boolean isInstanceOf ContactsMultiDeletionFragment(){
[size=1em]    return false;
[size=1em]}




在onCreateLoader函数中,倒数第二句

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]mAdapter.configureLoader(loader, directoryId);



之前增加语句:  

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3

[size=1em][size=1em]mAdapter.setShowReadOnlyContact(isInstanceOfContactsMultiDeletionFragment() ? false : true);
[size=1em]mAdapter.configureLoader(loader, directoryId);



6.[Before M Version]

File: ContactsMultiDeletionFragment.java

Path:alps\packages\apps\Contacts\src\com\mediatek\contacts\list

添加代码:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5

[size=1em][size=1em]protected boolean isInstanceOf ContactsMultiDeletionFragment(){
[size=1em]    return true;
[size=1em]}



[ [After M Version]

C  FILE: packages/apps/ContactsCommon/src/com/android/contacts/common/list/ContactEntryListAdapter.java

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9


[size=1em]10


[size=1em]11


[size=1em]12


[size=1em]13


[size=1em]14


[size=1em]15


[size=1em]16


[size=1em]17


[size=1em]18


[size=1em]19


[size=1em]20


[size=1em]21


[size=1em]22


[size=1em]23


[size=1em]24


[size=1em]25


[size=1em]26


[size=1em]27


[size=1em]28


[size=1em]29


[size=1em]30


[size=1em]31


[size=1em]32


[size=1em]33


[size=1em]34


[size=1em]35


[size=1em]36


[size=1em]37


[size=1em]38


[size=1em]39


[size=1em]40


[size=1em]41


[size=1em]42


[size=1em]43


[size=1em]44


[size=1em]45


[size=1em]46


[size=1em]47


[size=1em]48


[size=1em]49


[size=1em]50


[size=1em]51

[size=1em][size=1em]public boolean isSdnNumber(int position) {
[size=1em]    boolean isSdnNumber = false;
[size=1em]    int partition = getPartitionForPosition(position);
[size=1em]    if (partition >= 0) {
[size=1em]        // Save the old cursor position - the call to getItem() may modify the cursor
[size=1em]        // position.
[size=1em]        int offset = getCursor(partition).getPosition();
[size=1em]        Cursor cursor = (Cursor) getItem(position);
[size=1em]        if (cursor != null) {
[size=1em]            // [START]
[size=1em]            // Before
[size=1em]            // isSdnNumber = cursor.getInt(ContactQuery.IS_SDN_CONTACT) == 1;
[size=1em]            // After
[size=1em]            final long isSdn = cursor.getInt(ContactQuery.IS_SDN_CONTACT);
[size=1em]            if (isSdn == 1 || isSdn == -2) {
[size=1em]               isSdnNumber = true;
[size=1em]            }
[size=1em]            Log.d(TAG, "[isSdnNumber] isSdn = " + isSdn + ",isSdnNumber = " + isSdnNumber); //add log
[size=1em]            // [END]

[size=1em]            // Restore the old cursor position.
[size=1em]            cursor.moveToPosition(offset);
[size=1em]        }
[size=1em]    }
[size=1em]    return isSdnNumber;
[size=1em]}



7.File:MultiContactsBasePickerAdapter.java

Path:alps\packages\apps\contacts\src\com\mediatek\contacts\list  

在configureSelection函数最后的语句

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]loader.setSelection(selection.toString());



之前增加语句:

[Java]hide
[size=1em]

[size=1em]1


[size=1em]2


[size=1em]3


[size=1em]4


[size=1em]5


[size=1em]6


[size=1em]7


[size=1em]8


[size=1em]9

[size=1em][size=1em]if (!showReadOnlyContact ) {
[size=1em]    selection.append(" AND " + Contacts.IS_SDN_CONTACT + "=0");
[size=1em]}

[size=1em]loader.setSelection(selection.toString());



8.File:AggregationSuggestionEngine.java

Path:alps\packages\apps\contacts\src\com\android\contacts\Editor

在loadAggregationSuggestions函数最后的语句
在语句:   

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]sb.append(" AND " + Contacts.INDICATE_PHONE_SIM + "=-1");



之后添加:

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]sb.append(" AND " + Contacts.IS_SDN_CONTACT + "!=-2");



9.File:JoinContactListAdapter.java

Path:packages\apps\contacts\src\com\android\contacts\list   
函数:public void configureLoader(CursorLoader cursorLoader, long directoryId)
将:

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]loader.setSelection(Contacts._ID + "!=?"+" AND " + Contacts.INDICATE_PHONE_SIM + "=-1");



修改为:

[Java]hide
[size=1em]

[size=1em]1

[size=1em][size=1em]loader.setSelection(Contacts._ID + "!=?"+" AND " + Contacts.INDICATE_PHONE_SIM + "=-1" + " AND " + Contacts.IS_SDN_CONTACT + "!=-2");




Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top