gpt4 book ai didi

android - 如果联系人与电话通讯录中的应用程序相关联,则显示应用程序图标

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:09 29 4
gpt4 key购买 nike

我正在尝试显示与应用程序关联的电话号码的应用程序图标。

我试着关注 this链接,但是太难了。
是否有任何库或任何简单的方法来解决这个问题?

例如,我们可以说联系人存在于 whatsapp、facebook、google、……电话通讯录中。
同样,我想在这些 Messenger 应用程序旁边显示我的应用程序图标。

As shown below

最佳答案

以下代码显示了一种可能的解决方案。调用 synchronizeContact 方法将导致在联系人应用程序中添加链接。请注意,它还不是健壮的代码,但它展示了想法并且正在运行。另请注意,以下两个 POJO 类是特定于我的实现的,对于联系人链接的工作不是必需的:PhoneNumber、ContactInfo。

主要 Activity .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);
}

联系人同步适配器服务:

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(点击联系人应用程序链接时的 Intent 类):

@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);
}

联系人.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"
/>

验证器.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;
}

联系信息:

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;
}

关于android - 如果联系人与电话通讯录中的应用程序相关联,则显示应用程序图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21701017/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com