startActivityForResult 没有被调用 ACTION_INSERT
startActivityForResult doesn't get called with ACTION_INSERT
我创建了一个意图如下:
我正在尝试使用联系人数据库来存储我在我的应用程序中创建的新联系人。但是我在调用
时遇到了困难
protected void onActivityResult(int requestCode, int resultCode, Intent data)
...没有被调用
Step 1: Created intent in Activity 1
Intent insertIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
// Sets the special extended data for navigation
insertIntent.putExtra(ContactsContract.Intents.Insert.NAME, name);
if (Integer.valueOf(Build.VERSION.SDK_INT) > 14) {
insertIntent.putExtra("finishActivityOnSaveCompleted", true);
}
/*
* * Demonstrates adding data rows as an array list associated with the DATA key
* */
// Defines an array list to contain the ContentValues objects for each row
ArrayList<ContentValues> contactData = new ArrayList<ContentValues>();
/*
* * Defines the raw contact row
* */
// Sets up the row as a ContentValues object
ContentValues rawContactRow = new ContentValues();
// Adds the account type and name to the row
rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.mydomain.com");
rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_NAME, contactName);
// Adds the row to the array
contactData.add(rawContactRow);
/*
* * * Adds the array to the intent's extras.
* */
insertIntent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contactData);
if (isHoneycomb()) {
insertIntent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, parcels);
}
为结果调用开始活动
static final int INSERT_CONTACT_REQUEST = 2;
startActivityForResult(insertIntent, INSERT_CONTACT_REQUEST);
第2步
从 Activity1 调用 startActivityforResult()。该应用程序现在创建了我确认的联系人,但完成后似乎没有调用 Activity1 中定义的下面这个方法。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i ("onActivityResult", "enter the routine!");
// Check which request we're responding to
System.out.println("result requestCode" + INSERT_CONTACT_REQUEST);
Uri contactUriTry = data.getData();
String contactUriString = contactUriTry.toString();
System.out.print(contactUriString);
我没有 noHistory=true 等...
任何我可能出错的地方的指示?
终于找到问题的根源了
调用 onActivityResult() 的调用 activity 有一个 finish(),因此甚至在回调到达之前它就被关闭了。所以这就是为什么我从未看到调用该方法的原因。
删除 finish() 并移动到
中的最后一行之后
onActivityResult() {
....
finish();
}
解决了问题。
我创建了一个意图如下:
我正在尝试使用联系人数据库来存储我在我的应用程序中创建的新联系人。但是我在调用
时遇到了困难protected void onActivityResult(int requestCode, int resultCode, Intent data)
...没有被调用
Step 1: Created intent in Activity 1
Intent insertIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
// Sets the special extended data for navigation
insertIntent.putExtra(ContactsContract.Intents.Insert.NAME, name);
if (Integer.valueOf(Build.VERSION.SDK_INT) > 14) {
insertIntent.putExtra("finishActivityOnSaveCompleted", true);
}
/*
* * Demonstrates adding data rows as an array list associated with the DATA key
* */
// Defines an array list to contain the ContentValues objects for each row
ArrayList<ContentValues> contactData = new ArrayList<ContentValues>();
/*
* * Defines the raw contact row
* */
// Sets up the row as a ContentValues object
ContentValues rawContactRow = new ContentValues();
// Adds the account type and name to the row
rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.mydomain.com");
rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_NAME, contactName);
// Adds the row to the array
contactData.add(rawContactRow);
/*
* * * Adds the array to the intent's extras.
* */
insertIntent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contactData);
if (isHoneycomb()) {
insertIntent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, parcels);
}
为结果调用开始活动
static final int INSERT_CONTACT_REQUEST = 2;
startActivityForResult(insertIntent, INSERT_CONTACT_REQUEST);
第2步 从 Activity1 调用 startActivityforResult()。该应用程序现在创建了我确认的联系人,但完成后似乎没有调用 Activity1 中定义的下面这个方法。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i ("onActivityResult", "enter the routine!");
// Check which request we're responding to
System.out.println("result requestCode" + INSERT_CONTACT_REQUEST);
Uri contactUriTry = data.getData();
String contactUriString = contactUriTry.toString();
System.out.print(contactUriString);
我没有 noHistory=true 等...
任何我可能出错的地方的指示?
终于找到问题的根源了
调用 onActivityResult() 的调用 activity 有一个 finish(),因此甚至在回调到达之前它就被关闭了。所以这就是为什么我从未看到调用该方法的原因。
删除 finish() 并移动到
中的最后一行之后onActivityResult() {
....
finish();
}
解决了问题。