34

2 つのボタンを持つアプリケーションがあります。アプリケーションを「閉じる」ボタンと、アルゴリズムを開始するボタン。「開始」をクリックすると、アプリケーションが「非表示」になり、通知バーに通知が表示されます。通知がクリック/押されたときにメソッドを実行/呼び出すことができる必要があります。この種の質問にはいくつかの答えがありますが、それらは信じられないほど曖昧であり、BroadcastReceiver のドキュメントへのリンクを示しているだけです。

BroadcastReceiver ドキュメントに URL を残して「このページを読んでください」と言う場合は、この質問に返信しないでください。BroadcastReceiver を使用して (通知を表示した同じクラス内から) メソッドを実行する方法を説明する場合は、これを実行する方法のコードをいくつか示してください。

私のアルゴリズム: ボタンを押す、通知を表示する、通知をクリックする、メソッドを呼び出す (アクティビティを表示しない)。それでおしまい。

それが不可能な場合は、お知らせください。もしそうなら、それを可能にするためにあなたがすることを教えてください。この単純なことは、Android SDK の開発者によって見落とされるべきではありません。

4

2 に答える 2

13

通知クリックでは、火災イベントやクリックリスナーを取得できません。通知バーに通知を追加すると、保留中のインテントを設定できます。これにより、通知をクリックするとインテント(アクティビティ/サービス/ブロードキャスト)が発生します。

私はあなたのための解決策を持っています、あなたが本当にあなたの活動を表示したくないなら、保留中の意図で始まる活動はそこからあなたの親活動に放送を送り、そしてただ保留中の活動を終えてそして一度放送されます受信者は、受信者内で必要なメソッドを親アクティビティ呼び出しで受信します。ご参考までに..

// This is what you are going to set a pending intent which will start once
// notification is clicked. Hopes you know how to add notification bar. 
Intent notificationIntent = new Intent(this, dummy_activity.class);
notificationIntent.setAction("android.intent.action.MAIN");
notificationIntent.addCategory("android.intent.category.LAUNCHER");
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                                notificationIntent,
                                PendingIntent.FLAG_UPDATE_CURRENT | 
                                Notification.FLAG_AUTO_CANCEL);

// Now, once this dummy activity starts send a broad cast to your parent activity and finish the pending activity
//(remember you need to register your broadcast action here to receive).
    BroadcastReceiver call_method = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action_name = intent.getAction();
                if (action_name.equals("call_method")) {
                    // call your method here and do what ever you want.
                }
            };
        };
        registerReceiver(call_method, new IntentFilter("call_method"));
    }
}
于 2012-06-30T04:19:59.750 に答える