所以我可以通过调用来显示 Android 的联系人选择 Activity
startActivityForResult(intent, PICK_CONTACT);
我可以通过覆盖 onActivityResult 来获取选定的联系人
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
}
问题是 onActivityResult 仅在我自己从 Activity 调用时可用。例如,如果我在 DialogPreference 中,我将如何获得选定的联系人,因为我没有要覆盖的 onActivityResult?
TIA
拍龙
最佳答案
所以我知道这个问题是老问题并且已经得到解答,但我遇到了评论中提到的相同问题。我在尝试从派生自 Preference 的类启动 ACTION_GET_CONTENT Intent 时遇到了这个问题。使用 Pentium10 的建议,我创建了一个从 Activity 派生的新类来启动 Intent 并获取结果。我将此类称为 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();
}
在我的自定义首选项类中,我希望选择器在用户点击首选项时启动。我设置了 onClick() 来启动我的 SurrogateActivity 类,然后它又在它的 onCreate 方法中启动我真正需要的 Intent 。
@Override
protected void onClick(){
super.onClick();
Intent launchHiddenActivity = new Intent(getContext(), SurrogateActivity.class);
getContext().startActivity(launchHiddenActivity);
}
Pentium10 建议在您的 Preference 类中使用一个私有(private)类,但是当我尝试这样做时,Android 无法实例化它。另外,请记住将您的“代理 Activity ”添加到您的 list 中。
关于android - 不是从 Activity 中调用 PICK_CONTACT Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193480/