gpt4 book ai didi

android - 如何为 ContactsContract 编辑器指定帐户

转载 作者:行者123 更新时间:2023-11-30 03:45:27 25 4
gpt4 key购买 nike

在我的应用程序中,我想调用联系人编辑器以允许用户添加新联系人。我想找到一种方法让应用程序将要使用的帐户传递给编辑器。如何做到这一点?

我还没有找到任何关于如何执行此操作的文档。我确实在 github 上找到了一些代码,其中显示了联系人编辑器检索帐户信息(参见 ContactEditorActivity )。它叫

  getParcelable(Intents.Insert.ACCOUNT);

我认为这一定是已弃用的代码,因为我在引用文献中的任何地方都找不到值 Intents.Insert.ACCOUNT。

总的来说,我调用编辑器的代码是有效的;这是一个摘录:

  Intent intent = new Intent();
intent.setAction (Intent.ACTION_INSERT);
intent.setData (ContactsContract.Contacts.CONTENT_URI);
intent.putExtra (ContactsContract.Intents.Insert.NAME, name);
... "put" other values ...
startActivityForResult (intent, ACTIVITY_REQUEST_FULL_EDIT);

谢谢。

最佳答案

我知道这是一个老问题,但这是我的解决方案,它似乎对我有用,以防万一有人遇到同样的问题。

我使用的是 Xamarin for Android,但 Java 代码几乎相同。

对于 API 23+,使用 ExtraAccount 字段 EG:

Android.Accounts.Account account = new Android.Accounts.Account(accountName, accountType);

...
intent.PutExtra(ContactsContract.Intents.Insert.ExtraAccount, account);
...

对于较旧的 API,我使用了“com.android.contacts.extra.ACCOUNT”字段 EG:

Android.Accounts.Account account = new Android.Accounts.Account(accountName, accountType);

...
intent.PutExtra("com.android.contacts.extra.ACCOUNT", account);
...

这打开了联系意向,默认为传入的帐户(绕过任何电话默认值)。这很方便,因为我正在设置一大堆信息,如 url、职位等,但由于联系人 Intent 默认为 SIM 卡 - 它无法保存此数据,所以它丢失了!

如果您想知道如何在手机上获取帐户,您可以使用:

AccountManager.Get(context).GetAccountsByType("com.google"); 

获取谷歌帐户,或

AccountManager.Get(context).GetAccounts(); 

获取所有账户。但是都不包括电话帐户或 SIM 卡帐户,所以我使用此代码获取这些:

    using Android.Accounts;

...

public List<Account> GetAccounts()
{
if (CheckReadContactsPermission())
{
var accountList = new List<Account>();
var uri = ContactsContract.Settings.ContentUri;

string[] projection = { ContactsContract.Settings.InterfaceConsts.AccountName,
ContactsContract.Settings.InterfaceConsts.AccountType };

var loader = new CursorLoader(context, uri, projection, null, null, null);
var cursor = (ICursor)loader.LoadInBackground();

if (cursor.MoveToFirst())
{
do
{
accountList.Add(new Account(cursor.GetString(cursor.GetColumnIndex(projection[0])),
cursor.GetString(cursor.GetColumnIndex(projection[1]))));
} while (cursor.MoveToNext());
}

return accountList;
}

return null;
}

关于android - 如何为 ContactsContract 编辑器指定帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079961/

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