作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我想调用联系人编辑器以允许用户添加新联系人。我想找到一种方法让应用程序将要使用的帐户传递给编辑器。如何做到这一点?
我还没有找到任何关于如何执行此操作的文档。我确实在 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/
我是一名优秀的程序员,十分优秀!