【问题标题】:startActivityForResult doesn't get called with ACTION_INSERTstartActivityForResult 不会被 ACTION_INSERT 调用
【发布时间】:2018-07-01 18:01:05
【问题描述】:

我创建了如下意图:

我正在尝试使用联系人数据库来存储我在应用程序中创建的新联系人。但是我在调​​用

时遇到了困难
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);

        }

致电STARTACTIVITY以获得结果

 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 等...

我可能会出错的任何指针?

【问题讨论】:

  • 也许你觉得这很有用:stackoverflow.com/questions/14278587/…
  • 您是否为您的活动配置了启动模式 (developer.android.com/guide/topics/manifest/…)?
  • 你没有调用 startActivityForResult
  • 抱歉忘记在代码中提到了;静态最终 int INSERT_CONTACT_REQUEST = 1;我确实有“startActivityForResult(intent, INSERT_CONTACT_REQUEST);”其实
  • 不,我没有启动模式设置。我在这里看到一些帖子讨论了启动模式的影响,所以我知道这不是问题。

标签: android android-contacts


【解决方案1】:

我终于找到了问题的根源。

调用 onActivityResult() 的调用 Activity 有一个 finish(),所以即使在回调到达之前它就已经关闭了。所以这就是为什么我从来没有看到被调用的方法。

删除finish()并移动到最后一行

onActivityResult() {
....
finish();
} 

解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多