1

所以我可以通过调用显示Android的联系人选择活动

startActivityForResult(intent, PICK_CONTACT); 

我可以通过覆盖 onActivityResult 来获取选定的联系人

public void onActivityResult(int reqCode, int resultCode, Intent data) { 
  super.onActivityResult(reqCode, resultCode, data); 
}

问题是 onActivityResult 仅在我自己从 Activity 调用时可用。例如,如果我在 DialogPreference 中,我将如何获得所选联系人,因为我没有要覆盖的 onActivityResult ?

TIA

帕特龙

4

2 回答 2

1

所以我知道这个问题很老并且已经得到解答,但我遇到了评论中提到的同样问题。我在尝试从派生自 Preference 的类中启动 ACTION_GET_CONTENT 意图时遇到了这个问题。使用 Pentium10 的建议,我创建了一个派生自 Activity 的新类来启动意图并获取结果。我调用了这个类 SurrogateActivity,它看起来像这样:

public class SurrogateActivity extends Activity {

@Override
public void onCreate(Bundle savedInstance){
    super.onCreate(savedInstance);
    Intent chooseFileIntent = new Intent();
    chooseFileIntent.setAction(Intent.ACTION_GET_CONTENT);
    // In my case I need an audio file path
    chooseFileIntent.setType("audio/*");
    startActivityForResult(chooseFileIntent, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == RESULT_OK){
         Uri audioPath = data.getData();
         // Use SharedPreferences.Editor to update preference value
         SharedPreferences.Editor prefsEditor = PreferenceManager.getDefaultSharedPreferences(this).edit();
         prefsEditor.putString(Keys.PREF_ALERT, audioPath.toString());
         prefsEditor.commit();
    }
    // finish this "hidden" activity on any result
    finish();
}

}

在我的自定义 Preference 类中,我希望选择器在用户点击偏好时启动。我设置 onClick() 来启动我的 SurrogateActivity 类,然后它又在其 onCreate 方法中启动我真正需要的意图。

    @Override
protected void onClick(){
    super.onClick();
    Intent launchHiddenActivity = new Intent(getContext(), SurrogateActivity.class);
    getContext().startActivity(launchHiddenActivity);
}

Pentium10 在您的 Preference 类中建议了一个私有类,但是当我尝试这个时,Android 无法实例化它。另外,请记住将您的“代理活动”添加到您的清单中。

于 2011-03-07T00:14:29.953 回答
0

我知道您想创建一个自定义 DialogPreference 来选择另一个问题中提出的联系人,您确实需要启动意图来选择联系人并获得结果。

我看到您需要在您自己的 DialogPreference 类中创建一个扩展 Activity 的私有类。您将使用该类和 onActivityResult。

你做得很好,继续努力。

于 2010-07-07T10:07:47.653 回答