Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Xamarin/C获取Android设备所有者的用户配置文件数据_C#_Android_Xamarin - Fatal编程技术网

C# 如何使用Xamarin/C获取Android设备所有者的用户配置文件数据

C# 如何使用Xamarin/C获取Android设备所有者的用户配置文件数据,c#,android,xamarin,C#,Android,Xamarin,我正在为Android 4.0冰激凌三明治和更高版本构建一个应用程序,并希望获得设备所有者的用户档案信息,例如: 显示名称、电子邮件、电话、职务、公司、办公地点、网站和Url 我在阅读的不同Stackoverflow帖子中尝试了不同的方法,包括访问手机帐户,查询用户配置文件ContactsContract.profile.ContentUri。没有骰子。我已经检查了ReadOwnerData和ReadProfile的权限 现在我正在使用此代码查询联系人,但托管查询返回的计数为0 var c =

我正在为Android 4.0冰激凌三明治和更高版本构建一个应用程序,并希望获得设备所有者的用户档案信息,例如:

显示名称、电子邮件、电话、职务、公司、办公地点、网站和Url

我在阅读的不同Stackoverflow帖子中尝试了不同的方法,包括访问手机帐户,查询用户配置文件ContactsContract.profile.ContentUri。没有骰子。我已经检查了ReadOwnerData和ReadProfile的权限

现在我正在使用此代码查询联系人,但托管查询返回的计数为0

var c = act.ManagedQuery (ContactsContract.Profile.ContentUri, null, null, null, null);
int count = c.Count;
string[] columnNames = c.GetColumnNames();
bool b = c.MoveToFirst();
int position = c.Position;
if (position == 0) {
    do {
        for (int j = 0; j < columnNames.Length; j++) {
            string columnName = columnNames[j];
            try {
                string columnValue = c.GetString(c.GetColumnIndex(columnName));
            } catch {}
            if (c.GetString(c.GetColumnIndex("is_user_profile")) == "1") {
                if (c.GetString(c.GetColumnIndex("has_email")) == "1") {
                    //var cEmail = ManagedQuery (ContactsContract.Data.ContentUri, null, ContactsContract.Data.InterfaceConsts.HasPhoneNumber + "!=0 AND (" + ContactsContract.Data.InterfaceConsts.Mimetype + "=? OR " + ContactsContract.Data.InterfaceConsts.Mimetype + "=?)", new String[]{ ContactsContract.CommonDataKinds.Email.ContentItemType, ContactsContract.CommonDataKinds.Phone.ContentItemType, ContactsContract.Contacts.InterfaceConsts.Id }, null);
                    var cEmail = act.ManagedQuery (ContactsContract.CommonDataKinds.Email.ContentUri, null, ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type + " = ?", new String[]{ c.GetString(c.GetColumnIndex(BaseColumns.Id)) }, null);
                    string[] columnNamesEmail = cEmail.GetColumnNames();
                    if (cEmail.Count > 0) {
                        cEmail.MoveToFirst();
                        do {
                            sEmail = cEmail.GetString(cEmail.GetColumnIndex(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type));
                            //sEmail = cEmail.GetString(cEmail.GetColumnIndex(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Data));
                            //sEmail = cEmail.GetString(cEmail.GetColumnIndex(ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId));
                        } while (cEmail.MoveToNext());
                    }
                    cEmail.Close();
                }
                if (c.GetString(c.GetColumnIndex("has_phone_number")) == "1") {
                    var cPhone = act.ManagedQuery (ContactsContract.CommonDataKinds.Phone.ContentUri, null, ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId + " = ?", new String[]{ c.GetString(c.GetColumnIndex(BaseColumns.Id)) }, null);
                    string[] columnNamesPhone = cPhone.GetColumnNames();
                    if (cPhone.Count > 0) {
                        cPhone.MoveToFirst();
                        do {
                            sPhone = cPhone.GetString(cPhone.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type));
                        } while (cPhone.MoveToNext());
                    }
                    cPhone.Close();
                }
            }
        }
    } while (c.MoveToNext());
}
c.Close();
有人能指出我如何重写这个查询吗

var cEmail = act.ManagedQuery (ContactsContract.CommonDataKinds.Email.ContentUri, null, ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type + " = ?", new String[]{ c.GetString(c.GetColumnIndex(BaseColumns.Id)) }, null);
或者我应该返回查询用户配置文件或帐户吗?以下是我为他们使用的代码:

账户:

Account[] accounts = AccountManager.Get (Context).GetAccounts ();
foreach (Account acc in accounts) {
    --- can only get DisplayName and ID
}
用户配置文件:

var uri = ContactsContract.Profile.ContentUri;

string[] projection = { 
    ContactsContract.CommonDataKinds.StructuredName.DisplayName, 
    ContactsContract.CommonDataKinds.Email.Address,
    ContactsContract.CommonDataKinds.Phone.Number,
    ContactsContract.CommonDataKinds.Organization.Title,
    ContactsContract.CommonDataKinds.Organization.Company,
    ContactsContract.CommonDataKinds.Organization.OfficeLocation,
    ContactsContract.CommonDataKinds.Website.Url };

var cursor = ManagedQuery (uri, projection, null, null, null);

if (cursor.MoveToFirst ()) {
    do {
        sDisplayName = cursor.GetString (cursor.GetColumnIndex (projection [0]));
        sEmail = cursor.GetString (cursor.GetColumnIndex (projection [1]));
        sPhone = cursor.GetString (cursor.GetColumnIndex (projection [2]));
        sTitle = cursor.GetString (cursor.GetColumnIndex (projection [3]));
        sCompany = cursor.GetString (cursor.GetColumnIndex (projection [4]));
        sOfficeLocation = cursor.GetString (cursor.GetColumnIndex (projection [5]));
        sWebsite = cursor.GetString (cursor.GetColumnIndex (projection [6]));


    } while (cursor.MoveToNext());
}

我将电子邮件查询更改为var cEmail=act.ManagedQuery ContactsContract.commondatatypes.email.ContentUri,null,ContactsContract.commondatatypes.email.InterfaceConsts.ContactId+=?,新字符串[]{c.GetStringc.GetColumnIndexBaseColumns.Id},null;但仍然计算出0。你解决了这个问题吗?我正在尝试获取用户名和电子邮件地址?
var uri = ContactsContract.Profile.ContentUri;

string[] projection = { 
    ContactsContract.CommonDataKinds.StructuredName.DisplayName, 
    ContactsContract.CommonDataKinds.Email.Address,
    ContactsContract.CommonDataKinds.Phone.Number,
    ContactsContract.CommonDataKinds.Organization.Title,
    ContactsContract.CommonDataKinds.Organization.Company,
    ContactsContract.CommonDataKinds.Organization.OfficeLocation,
    ContactsContract.CommonDataKinds.Website.Url };

var cursor = ManagedQuery (uri, projection, null, null, null);

if (cursor.MoveToFirst ()) {
    do {
        sDisplayName = cursor.GetString (cursor.GetColumnIndex (projection [0]));
        sEmail = cursor.GetString (cursor.GetColumnIndex (projection [1]));
        sPhone = cursor.GetString (cursor.GetColumnIndex (projection [2]));
        sTitle = cursor.GetString (cursor.GetColumnIndex (projection [3]));
        sCompany = cursor.GetString (cursor.GetColumnIndex (projection [4]));
        sOfficeLocation = cursor.GetString (cursor.GetColumnIndex (projection [5]));
        sWebsite = cursor.GetString (cursor.GetColumnIndex (projection [6]));


    } while (cursor.MoveToNext());
}