【问题标题】:Are "Contacts" available via the Emulator?是否可以通过模拟器使用“联系人”?
【发布时间】:2012-01-05 03:30:24
【问题描述】:

在我尝试访问联系人的代码中(在模拟器中,是的,确实没有可访问的联系人,但我认为它会“伪造”一些制造的联系人),我的应用程序在 Eclipse 中翻转或翻转到 Debug Perspective 中,LogCat 告诉我:

应用程序:com.google.process.gapps 标签: GTalkService 文本:EVENT_GSERVICES_CHANGED:没有 GTALK 连接!

如果这是意料之中的,解决方法是什么? 如果不出所料,我的失败可能是什么?

根据要求,我现在的代码:

import android.app.AlertDialog;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleCursorAdapter;

public class ContactsActivity extends ListActivity implements AdapterView.OnItemClickListener {

    Cursor mContacts;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Return all contacts, ordered by name
        String[] projection = new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };
        mContacts = managedQuery(ContactsContract.Contacts.CONTENT_URI,
                projection, null, null, ContactsContract.Contacts.DISPLAY_NAME);

        // Display all contacts in a ListView
        SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, mContacts,
                new String[] { ContactsContract.Contacts.DISPLAY_NAME },
                new int[] { android.R.id.text1 });
        setListAdapter(mAdapter);
        // Listen for item selections
        getListView().setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        if (mContacts.moveToPosition(position)) {
            int selectedId = mContacts.getInt(0); // _ID column
            // Gather email data from email table
            Cursor email = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                    new String[] { ContactsContract.CommonDataKinds.Email.DATA },
                    ContactsContract.Data.CONTACT_ID + " = " + selectedId, null, null);
            // Gather phone data from phone table
            Cursor phone = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER },
                    ContactsContract.Data.CONTACT_ID + " = " + selectedId, null, null);
            // Gather addresses from address table
            Cursor address = getContentResolver().query(
                    ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                    new String[] { ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS },
                    ContactsContract.Data.CONTACT_ID + " = " + selectedId, null, null);

            //Build the dialog message
            StringBuilder sb = new StringBuilder();
            sb.append(email.getCount() + " Emails\n");
            if (email.moveToFirst()) {
                do {
                    sb.append("Email: " + email.getString(0));
                    sb.append('\n');
                } while (email.moveToNext());
                sb.append('\n');
            }
            sb.append(phone.getCount() + " Phone Numbers\n");
            if (phone.moveToFirst()) {
                do {
                    sb.append("Phone: " + phone.getString(0));
                    sb.append('\n');
                } while (phone.moveToNext());
                sb.append('\n');
            }
            sb.append(address.getCount() + " Addresses\n");
            if (address.moveToFirst()) {
                do {
                    sb.append("Address:\n" + address.getString(0));
                } while (address.moveToNext());
                sb.append('\n');
            }

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(mContacts.getString(1)); // Display name
            builder.setMessage(sb.toString());
            builder.setPositiveButton("OK", null);
            builder.create().show();

            // Finish temporary cursors
            email.close();
            phone.close();
            address.close();
        }
    }
}

【问题讨论】:

  • 您可以发布您用来访问联系人的代码吗?
  • 好的,我编辑了上面的帖子,添加了代码。

标签: android android-emulator android-contacts android-contentprovider android-logcat


【解决方案1】:

使用 AVD 并将目标设置为 Google API (Google Inc.) - API 级别

【讨论】:

  • 所以这就是另一半的生活方式(我假设这是 Macintosh 版本 - 几乎可以肯定不是 Windows)
  • 我仔细检查并确实将其设置为使用 Google AVD,但版本 10 而不是 14。LogCat 像这样:...[2012-01-05 21:29:07 - KeepInTouch ] 尝试将调试器连接到端口 8625 上的 'com.aXX3AndSpace.KeepInTouch' 它似乎挂在最后一行;我在 ContactActivity 早期有两个断点没有到达,但我不知道为什么......
猜你喜欢
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2021-11-17
  • 2023-02-09
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多