2010-07-07 5 views
1

그래서 내가는 활동에서 PICK_CONTACT가 의도하지 호출

startActivityForResult(intent, PICK_CONTACT); 

를 호출하여 안드로이드의 연락처 selecton 활동을 표시 할 수 있습니다 내가 onActivityResult를

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

문제를 재정 의하여 선택한 연락처를 얻을 수 있습니다에서만 사용할 수 있습니다 onActivityResult를하다 내가 활동에서 직접 전화 할 때. 예를 들어 DialogPreference에있는 경우 재정의 할 onActivityResult가 없기 때문에 선택한 연락처에서 어떻게 얻을 수 있습니까?

TIA

팻 롱

답변

0

난 당신이 참으로 연락처를 선택하고 결과를 얻을 수있는 의도를 실행해야합니다, 당신은 다른 질문에 제안 된 Pick a Contact에 사용자 정의 DialogPreference을 만들려는 알고있다.

자신의 DialogPreference 클래스에서 Activity를 확장하는 개인 클래스를 만들어야합니다. 그리고 그 클래스와 onActivityResult를 사용할 것입니다.

당신은 훌륭한 일을하고 있으며, 훌륭한 일을 계속하고 있습니다.

+0

그래, 오늘 이걸 살펴보고 "startActivityForResult (intent, PICK_CONTACT);를 실행 한 후 NullPointerException이 발생합니다." 내 접근 방식을 실행하고 싶습니다. 새로운 클래스 ContactPreference가 환경 설정을 확장합니다. 새 클래스 PickContactActivity extends Activity ContactPreference는 레이아웃에 버튼을 추가합니다.이 버튼을 클릭하면 PickContactActivity 인스턴스의 메서드를 호출합니다. PickContactActivity의 메소드는 startActivityForResult (intent, PICK_CONTACT)를 호출합니다. 이 호출은 NullPointerException으로 실패합니다. 그 접근 방식이 당신이 기대할 수있는 것입니까? –

+0

그 때 null인지, 아마도 당신의 의도 또는 다른 것을 알아낼 수 있습니까? – Pentium10

+0

이미 확인했지만 아무 것도 명백하지 않습니다. startActivityForResult로 끝나는 의도는 Eclipse의 "Intent {act = android.intent.action.PICK dat = content : // contacts/people}"와 같습니다. startActivityForResult에서 호출 스택이 2661을보고합니다. –

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(); 
} 

} 내 사용자 지정 기본 설정 클래스에서

, 내가 사용이 환경 설정을 탭하면 실행하려면 선택기를 원했다. onClick()을 설정하여 SurrogateActivity 클래스를 시작한 다음 onCreate 메소드에서 실제로 필요한 인 텐트를 시작합니다.

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

는 Pentium10 사용자의 기호 클래스 내부에 private 클래스를 제안하지만이 시도 할 때, 안드로이드는 그것을 인스턴스화 할 수 있습니다. 또한 매니페스트에 '대리 활동'을 추가해야합니다.

관련 문제