如何为ContactsContract编辑器指定帐户



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

我没有找到任何关于如何做到这一点的文件。我确实在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);

谢谢。

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

我在Android上使用Xamarin,但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、职位等,但由于联系人的意图默认为SIM卡,它会丢失,因为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;
        }

相关内容

  • 没有找到相关文章

最新更新