0

Androidアプリケーションでは、*ContactsContract.Contacts.CONTENT_URI*でインテントアクション*ACTION_PICK*を使用して連絡先の選択を実装しました。この方法は(ほとんど)正常に機能しますが、残念ながら、着信イベントのアクティビティを制御することはできません。

アプリは、バックグラウンドで強制されたときにログアウトして終了する必要があります。現時点では、メインアクティビティにアクティビティイベントonStop()を使用して実装されていますが、システムからの連絡先アクティビティが開いている場合、アプリは明らかにそのイベントを受信しません。

なんとかしてコンタクトアクティビティをサブクラス化しようとしましたが、管理できないのではないかと思います。

さまざまなアクティビティ開始フラグを使用しようとしましたが、この状況に関連するフラグが見つかりませんでした(フラグがstartActivityForResult()メソッドで機能していないことは言うまでもありません)。

さまざまなブロードキャストイベントに接続しようとしましたが、アプリをバックグラウンドにプッシュしてしまう可能性が多すぎます。

上部にあるアプリケーションをポーリングするためのいくつかのトリックを見つけましたが、それにはGET_TASKS権限が必要であり、一般的にはとにかく大きなハックになります。行きたくない。

だから、私の質問を要約すると:

連絡先アクティビティが開いているときにアプリケーションがバックグラウンドに適用されていることを検出する方法はありますか?

4

2 に答える 2

0

結果を待つことです。連絡先が返されると、連絡先アプリケーションはデータを使用して新しいインテントを作成し、アプリケーションではonActivityResultのようなものを使用する必要があります(実際のメソッドを思い出せません)

リソースの下にあるAndroidDevelopersのWebサイトを見てください。基本または高度なトレーニングでは、他のアプリケーションとの通信に関する情報がいくつかあります。


編集

import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.CommonDataKinds.Email;

private static final int CONTACT_PICKER_RESULT = 1001;
private boolean chooseContact = false;
private boolean returned = false;

public void doLaunchContactPicker(View view) {
    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
            Contacts.CONTENT_URI);
    startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
    chooseContact = true;
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case CONTACT_PICKER_RESULT:
            // handle contact results
            break;
        }

    } else {
        // gracefully handle failure
        Log.w(DEBUG_TAG, "Warning: activity result not ok");
    }
}

@Override
public void onResume(){
    super.onResume();
    if(contactChoose && !returned){
            finish();
    }
}
于 2012-06-13T01:07:14.583 に答える
0

最後に、私の同僚は答えを見つけました:

次のプロパティをメインアクティビティに追加します。

android:launchMode="singleTask"
android:clearTaskOnLaunch="true"

また、連絡先の選択が開いているときにユーザーがホームボタンを押してアプリを再起動すると、メインアクティビティで新しいイベントがトリガーされます。

public void onNewIntent(Intent newIntent)

キャンセル結果コードは、ユーザーが連絡先選択アクティビティで戻るボタンを押したときと同じように戻ってきますが、その場合、この特定のイベントはトリガーされません。このようにして、ユーザーが連絡先アクティビティを閉じたときとシステムが連絡先アクティビティを閉じたときの状況を区別できます。

于 2012-06-27T01:05:04.617 に答える