2014-02-11 7 views
9

Ich versuche, das Anwendungssymbol für die Telefonnummer anzuzeigen, die der Anwendung zugeordnet ist.Zeigen Sie das App-Symbol an, wenn der Kontakt der Anwendung im Telefonadressbuch zugeordnet ist

Ich habe versucht, this Link zu folgen, aber es ist zu schwierig.
Gibt es eine Bibliothek für diesen oder einen einfachen Weg, um dieses Problem zu lösen?

Zum Beispiel können wir sagen, der Kontakt ist in WhatsApp, Facebook, Google, ... in Telefon-Adressbuch vorhanden.
Ebenso möchte ich mein Anwendungssymbol neben diesen Messenger-Anwendungen anzeigen.

As shown below

+0

Haben Sie Ihre Lösung ?? Wenn ja, teilen Sie bitte ... – Rahul

+0

@Rahul Nein, ich habe die Lösung nicht bekommen. Wenn Sie es wissen, sind Sie willkommen –

+0

diese zwei Links haben mir geholfen, dies zu lösen [Teil 1] (http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/) [Teil 2] (http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/) @Kartheek – Rahul

Antwort

5

Der folgende Code zeigt eine mögliche Lösung. Der Aufruf der Methode synchronizeContact führt zum Hinzufügen des Links in der Kontakt-App. Beachten Sie, es ist noch nicht robuster Code, aber es zeigt die Idee und funktioniert. Beachten Sie auch, dass die folgenden zwei POJO-Klassen spezifisch für meine Implementierung sind und nicht für das Funktionieren der Kontaktverknüpfung wichtig sind: PhoneNumber, ContactInfo.

MainActivity.java:

private void synchronizeContact(ContactInfo contactInfo) 
{ 
    ContactsSyncAdapterService syncAdapter = new ContactsSyncAdapterService(); 
    Account account = new Account(contactInfo.getDisplayName(), getString(R.string.account_type)); //account_type = <yourpackage>.account 
    PhoneNumber phoneNumber = contactInfo.getPhoneNumbers().get(0); 
    syncAdapter.performSync(MainActivity.this, account, phoneNumber); 
} 

ContactsSyncAdapterService:

private static ContentResolver itsContentResolver = null; 

public void performSync(Context context, Account account, PhoneNumber number) 
{ 
    itsContentResolver = context.getContentResolver(); 
    addContact(account, account.name, account.name, number.getNumber()); 
} 

private void addContact(Account account, String name, String username, String number) 
{ 
    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); 

    ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); 
    builder.withValue(RawContacts.ACCOUNT_NAME, account.name); 
    builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); 
    builder.withValue(RawContacts.SYNC1, username); 
    operationList.add(builder.build()); 

    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name); 
    operationList.add(builder.build()); 

    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0); 
    builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.<yourpackage>.profile"); 
    builder.withValue(ContactsContract.Data.DATA1, username); 
    builder.withValue(ContactsContract.Data.DATA2, number); 
    operationList.add(builder.build()); 

    try 
    { 
     itsContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); 
    } 
    catch (OperationApplicationException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (RemoteException e) 
    { 
     e.printStackTrace(); 
    } 
} 

ProfileActivity (Klasse für die Absicht, wenn der Kontakt-App-Link tippen):

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.profile); 

    Uri intentData = getIntent().getData(); 
    if (isNotEmpty(intentData)) 
    { 
     Cursor cursor = managedQuery(intentData, null, null, null, null); 
     if (cursor.moveToNext()) 
     { 
      String username = cursor.getString(cursor.getColumnIndex("DATA1")); 
      String number = cursor.getString(cursor.getColumnIndex("DATA2")); 
      TextView view = (TextView) findViewById(R.id.profiletext); 
      view.setText("<yourtext>"); 
      doSomething(getPhoneNumber(number)); 
     } 
    } 
    else 
    { 
     handleIntentWithoutData(); 
    } 
} 

private void doSomething(PhoneNumber phoneNumber) 
{ 
    Uri uri = Uri.parse("tel:" + phoneNumber.getNumber()); 
    Intent intent = new Intent(Intent.ACTION_CALL, uri); 
    startActivity(intent); 
} 

contacts.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ContactsSource xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ContactsDataKind 
     android:icon="@drawable/ic_launcher" 
     android:mimeType="vnd.android.cursor.item/vnd.<yourpackage>.profile" 
     android:summaryColumn="data2" 
     android:detailColumn="data3" 
     android:detailSocialSummary="true" 
    /> 

authenticator.xml:

<?xml version="1.0" encoding="utf-8"?> 
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accountType="<yourpackage>.account" 
    android:icon="@drawable/ic_launcher" 
    android:smallIcon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:accountPreferences="@xml/account_preferences" 
/> 

account_preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
</PreferenceScreen> 

sync_contacts.xml:

<?xml version="1.0" encoding="utf-8"?> 
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" 
    android:contentAuthority="com.android.contacts" 
    android:accountType="<yourpackage>.account" 
    android:supportsUploading="false" 
/> 

Telefonnummer:

private String number; 

public String getNumber() 
{ 
    return number; 
} 

public void setNumber(String number) 
{ 
    this.number = number; 
} 

Contact:

private List<PhoneNumber> itsPhoneNumbers = new ArrayList<PhoneNumber>(); 

public void setDisplayName(String displayName) 
{ 
    this.itsDisplayName = displayName; 
} 

public String getDisplayName() 
{ 
    return itsDisplayName; 
} 

public void addPhoneNumber(PhoneNumber phoneNumber) 
{ 
    this.itsPhoneNumbers.add(phoneNumber); 
} 

public List<PhoneNumber> getPhoneNumbers() 
{ 
    return itsPhoneNumbers; 
} 
+1

Unvollständiger Code. –

+0

Wo muss ich die ProfileActivity definieren? – toni

+0

In AndroidManifest.XML: toni

Verwandte Themen