Android 如何在QuickContactBadge启动活动后获取联系信息(如号码、姓名等)

Android 如何在QuickContactBadge启动活动后获取联系信息(如号码、姓名等),android,android-intent,android-contacts,android-2.2-froyo,Android,Android Intent,Android Contacts,Android 2.2 Froyo,我正在研究QuickContactBadge。我想做的是在QuickContactBadge(如facebook或gmail)中显示我的应用程序图标,当用户按下图标时,它将启动我的应用程序,启动选定的活动。当活动启动时,我想获得用户选择的电话号码 目前,我的应用程序显示QuickContactBadge,该徽章也启动了应用程序中的主要活动,但我无法获取用户启动应用程序的电话号码表单 我的代码如下: @Override public void onCreate(Bundle savedIn

我正在研究QuickContactBadge。我想做的是在QuickContactBadge(如facebook或gmail)中显示我的应用程序图标,当用户按下图标时,它将启动我的应用程序,启动选定的活动。当活动启动时,我想获得用户选择的电话号码

目前,我的应用程序显示QuickContactBadge,该徽章也启动了应用程序中的主要活动,但我无法获取用户启动应用程序的电话号码表单

我的代码如下:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(getIntent().getData() != null) {
            Cursor cursor = getContentResolver().query(getIntent().getData(), null, null, null, null);
            if(cursor != null) {
                while (cursor.moveToNext()) { 
                    String contactId = cursor.getString(cursor.getColumnIndex( 
                            ContactsContract.Contacts._ID)); 
                    String hasPhone = cursor.getString(cursor.getColumnIndex( 
                            ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
                    if (Integer.parseInt(hasPhone) == 1) { 
                        // You know have the number so now query it like this
                        Cursor phones = getContentResolver().query( 
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?" , 
                                new String[]{contactId}, null); 
                        while (phones.moveToNext()) { 
                            String phoneNumber = phones.getString( 
                                    phones.getColumnIndex( 
                                            ContactsContract.CommonDataKinds.Phone.NUMBER));  
                        } 
                        phones.close(); 
                    } else{
                        Toast.makeText(this, "Invalid Contact", Toast.LENGTH_SHORT).show();
                    }
                }   
            }
        }
        setContentView(R.layout.main);
    }
它正在获取Intent.getData,但hasPhone number上出现异常,因为列不存在,如果在获取电话号码时忽略此异常,则代码中也会出现此异常。请帮助我哪里做错了

我已使用此代码在QuickContactBadge中显示我的应用程序

<activity
    android:name=".SandBoxProjectActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:mimeType="vnd.android.cursor.item/name" />
    </intent-filter>
</activity>

我没有仔细查看您的代码,但这对我很有用:

        // check if activity was launched from contacts
    if (getIntent().getData() != null) {
        Cursor cursor = getContentResolver().query(getIntent().getData(), null, null, null, null);
        if (cursor!=null && cursor.moveToNext()) {
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID));
            cursor.close();

            selectContactNumber(contactId);
        }
    }


}

private void selectContactNumber(String contactId) {
    ArrayList<String> numbersArr = new ArrayList<String>();

    // You know it has a number so now query it like this
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
    while (phones.moveToNext()) {
        String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        numbersArr.add(phoneNumber);
    }
    phones.close();

    switch (numbersArr.size()) {
    case 0:
        mNumberSelectorDialog = DialogFactory.getInstance().createNoNumbersMessageDialog(this);
        mNumberSelectorDialog.show();
        break;
    case 1:
        setNumberToCall(numbersArr.get(0));
        break;
    default:
        mNumberSelectorDialog = DialogFactory.getInstance().createNumberSelectorDialog(this, numbersArr.toArray(new String[0]));
        mNumberSelectorDialog.show();
        break;
    }
}
//检查活动是否从联系人启动
if(getIntent().getData()!=null){
Cursor Cursor=getContentResolver().query(getIntent().getData(),null,null,null);
if(cursor!=null&&cursor.moveToNext()){
String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID));
cursor.close();
选择ContactNumber(contactId);
}
}
}
private void selectContactNumber(字符串contactId){
ArrayList numbersArr=新的ArrayList();
//你知道它有一个数字,所以现在像这样查询它
游标phones=getContentResolver().query(ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,ContactsContract.CommonDataTypes.Phone.CONTACT\u ID+“=”+contactId,null,null);
while(phones.moveToNext()){
String phoneNumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
numbersArr.add(电话号码);
}
电话。关闭();
开关(numbersArr.size()){
案例0:
mNumberSelectorDialog=DialogFactory.getInstance().createNoNumbersMessageDialog(此);
mNumberSelectorDialog.show();
打破
案例1:
setNumberToCall(numbersArr.get(0));
打破
违约:
mNumberSelectorDialog=DialogFactory.getInstance().createNumberSelectorDialog(此为numbersArr.toArray(新字符串[0]);
mNumberSelectorDialog.show();
打破
}
}