我正在尝试显示与应用程序关联的电话号码的应用程序图标。
我尝试关注this链接,但实在太难了 是否有任何图书馆可以解决这个问题或任何简单的方法?
例如,我们可以说联系人存在于电话地址簿中的whatsapp,facebook,google,... 同样,我想在这些信使应用程序旁边显示我的应用程序图标。
答案 0 :(得分:6)
以下代码显示了可能的解决方案。调用synchronizeContact方法将导致在联系人应用程序中添加链接。 请注意,它不是强大的代码,但它显示了这个想法并且正在运行。 另请注意,以下两个POJO类特定于我的实现,对于联系人链接的工作不是必不可少的: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(点击联系人应用链接时的意图类):
@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"
/>
电话号码:
private String number;
public String getNumber()
{
return number;
}
public void setNumber(String number)
{
this.number = number;
}
的ContactInfo:
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;
}