1

だから私は呼び出すことでAndroidの連絡先selectonアクティビティを表示できます

startActivityForResult(intent, PICK_CONTACT); 

onActivityResult をオーバーライドすることで、選択した連絡先を取得できます

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

問題は、onActivityResult が利用できるのは、Activity から自分で呼び出している場合のみです。たとえば、DialogPreference にいる場合、オーバーライドする onActivityResult がないため、選択した連絡先を取得するにはどうすればよいですか?

ティア

パット・ロング

4

2 に答える 2

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

}

私のカスタム Preference クラスでは、使用者が設定をタップしたときにピッカーを起動したいと考えていました。onClick() を設定して SurrogateActivity クラスを起動し、onCreate メソッドで本当に必要なインテントを起動します。

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

Pentium10 は Preference クラス内にプライベート クラスを提案しましたが、これを試したところ、Android はそれをインスタンス化できませんでした。また、「代理アクティビティ」をマニフェストに追加することを忘れないでください。

于 2011-03-07T00:14:29.953 に答える
0

他の質問で提案されているように、連絡先を選択するためのカスタム DialogPreference を作成したいことはわかっています。連絡先を選択して結果を取得するには、実際にインテントを起動する必要があります。

独自の DialogPreference クラスで Activity を拡張するプライベート クラスを作成する必要があるようです。そして、そのクラスと onActivityResult を使用します。

あなたは素晴らしい仕事をしています、良い仕事を続けてください。

于 2010-07-07T10:07:47.653 に答える