所以我知道这个问题很老并且已经得到解答,但我遇到了评论中提到的同样问题。我在尝试从派生自 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 无法实例化它。另外,请记住将您的“代理活动”添加到您的清单中。