Итак, я знаю, что эта проблема устарела и на нее был дан ответ, но у меня были те же проблемы, о которых упоминалось в комментариях. У меня возникла проблема с попыткой запустить ACTION_GET_CONTENT из класса I, полученного из Preference. Используя предложение 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();
}
}
В моем пользовательском классе предпочтений, я хотел сборщик для запуска, когда использование кранов предпочтения. Я установил onClick() для запуска моего класса SurrogateActivity, который затем, в свою очередь, запускает намерение, которое мне действительно нужно в методе onCreate.
@Override
protected void onClick(){
super.onClick();
Intent launchHiddenActivity = new Intent(getContext(), SurrogateActivity.class);
getContext().startActivity(launchHiddenActivity);
}
Pentium10 предложил частный класс в вашем классе предпочтений, но когда я попробовал это, Android не смог его создать. Кроме того, не забудьте добавить свою «суррогатную деятельность» к вашему манифесту.
OK Итак, у меня было некоторое время сегодня, чтобы взглянуть на это, и я получаю исключение NullPointerException после запуска «startActivityForResult (намерение, PICK_CONTACT)»; Просто хочу, чтобы бежать от вас мой подход Новый класс ContactPreference extends Предпочтение. Новый класс PickContactActivity extends Activity ContactPreference добавляет кнопку в свой макет при щелчке, который вызывает метод в экземпляре PickContactActivity. Метод в PickContactActivity вызывает startActivityForResult (намерение, PICK_CONTACT); Этот вызов завершается с ошибкой NullPointerException. Это то, что вы ожидаете? –
Можете ли вы выяснить, что в то время было нулевым, возможно, ваше намерение или что-то еще? – Pentium10
Уже проверено, ничего очевидного. Цель, которая заканчивается gettign до , startActivityForResult выглядит так в Eclipse «Intent {act = android.intent.action.PICK dat = content: // contacts/people}» Стол вызовов представляет строку 2661 отчетов в startActivityForResult –