1

私が知る限り、これはうまくいくはずです。そうでないことを除いて:-/

アイデアは、私が使用するすべてのアクティビティクラスを拡張して、送信時にトーストメッセージをポップアップするBroadcastReceiverを含めることです。この戦略の最終的なゲームは、非同期ワーカーのジョブが「最上位」の形式(利用可能な場合)である「自分で発見」し、選択しない場合に非同期イベントの一部であるにもかかわらず、トーストを介してメッセージを使用に投稿できることです。(*)コンテキストを引数として渡します。

問題:doDemo()を呼び出すと、発生イベントが発生 log.dします(doDemo()から取得します)が、receiveイベントは発生しません。

(*)これは不可欠です、それは全体の目的です

public class ToastActivity extends Activity{
    private BroadcastReceiver ToastBroadCastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive( Context context, Intent intent ) {
            Toast.makeText(getApplicationContext(), intent.getAction() + " package: "+ intent.getPackage(), Toast.LENGTH_SHORT).show();
            Log.d("ToastBroadCastReceiver", "Broadcastreceiver: " + intent.getAction() + " package: "+ intent.getPackage() + " @" + System.currentTimeMillis());
        }
    };

    public void onResume() {
        super.onResume();
        registerReceiver(ToastBroadCastReceiver, new IntentFilter("com.my.domain.BROADCAST"));
    }

    public void onPause() {
        super.onPause();
        unregisterReceiver(ToastBroadCastReceiver);
    }

    public void doDemo(){
        Log.d("ToastBroadCastReceiver", "doDemo Broadcast started" );
        Intent broadCastIntent = new Intent();
        broadCastIntent.setAction( "com.my.domain.BROADCAST");
        broadCastIntent.setPackage( "well hello test!" );        
        sendBroadcast(broadCastIntent);
        Log.d("ToastBroadCastReceiver", "doDemo Broadcast sent" );
    }

}

編集

アリとの長い会話の後、これが私たちが思いついたものです

public class ToastActivity extends Activity{
    private BroadcastReceiver ToastBroadCastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive( Context context, Intent intent ) {

            if (intent.getAction().equals("TOASTMESSAGE")) {
                String message = "";
                Bundle extras = intent.getExtras();
                if (extras != null)            {
                    message = extras.getString("message");
                }
                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
                Log.d("ToastBroadCastReceiver", "Broadcastreceiver: " + message + "|" + intent.getAction());
            }
        }
    };

    public void ToastRegister(){
        registerReceiver(ToastBroadCastReceiver, new IntentFilter("TOASTMESSAGE"));
    }

    public void ToastDeRegister(){
        try { 
            unregisterReceiver(ToastBroadCastReceiver);     
        } 
        catch (Exception e) {
            Log.e("ToastBroadCastReceiver", e.getMessage());
        }       
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ToastRegister();
    }

    public void onResume() {
        super.onResume();
        ToastRegister();
    }

    public void onPause() {
        super.onPause();
        ToastDeRegister();
    }

    public void onDestroy() {
        super.onDestroy();
        ToastDeRegister();
    }

    public void doDemo(){
        Log.d("ToastBroadCastReceiver", "doDemo Broadcast started" );

        Intent broadCastIntent = new Intent();
        broadCastIntent.setAction("TOASTMESSAGE");
        broadCastIntent.putExtra("message","hello test message!");
        sendBroadcast(broadCastIntent);

        Log.d("ToastBroadCastReceiver", "doDemo Broadcast sent" );
    }

}
4

1 に答える 1

2

この行が問題です broadCastIntent.setPackage( "well hello test!" );

このようにコードを編集します

 broadCastIntent.setPackage( "com.my.domain.BROADCAST");
 broadCastIntent.setAction( "well hello test!" );  

また、この行を置き換えます

 registerReceiver(ToastBroadCastReceiver, new IntentFilter("com.my.domain.BROADCAST"));

これとともに

 registerReceiver(ToastBroadCastReceiver, new IntentFilter("well hello test!"));

あなたのonReceiveでこのようにしてください

if (intent.getAction().equals("well hello test!")) {
                Update_chat_counter();
于 2012-12-08T15:36:50.587 に答える