android - 不是从 Activity 中调用 PICK_CONTACT Intent

标签 android android-preferences

所以我可以通过调用来显示 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/

相关文章:

java - 来自 EdittextPreference 的文本

Android SDK 使用 PreferenceActivity 添加设置

android - ListView 中每个项目的单独首选项?

java - 根据字符串的长度分割字符串

android - android 设备上的 map 仅显示来自 url 的一个标记,但在我使用 Toast 时显示所有值

android - res文件夹和R.java的问题

Android:ListPreference 隐藏/禁用值

android - 在 Android webview 中禁用地址栏

java - Android + Parse 从 Query 获取 objectId

偏好设置中的 Android 存储数组