0

IncomingCallReceiver拡張するがありますBroadcastReciever

内部onReceiveでは、ユーザーが通話を受信または拒否するまで、Toast を使用していくつかの情報を表示したいと考えています。

電話が鳴ったら、ループを使ってトーストを表示しています。

ユーザーが電話を受けるか、電話を拒否すると、トーストがキャンセルされます。

ただし、Toast はキャンセルされません。

 public class IncommingCallReceiver extends BroadcastReceiver
         {

            Context context;
        static Toast toast;

            @Override
        public void onReceive(Context mContext, Intent intent)
         {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

        TextView  tv=new TextView(mContext);
        tv.setBackgroundColor(color.background_light);
        Log.i("On Recieve"," ");
        //Toast toast=new Toast(mContext);
        if(state==null)
            return;
        if(state.equals(TelephonyManager.EXTRA_STATE_RINGING))
        {
            for(int i=0;i<7;i++)
            {
               toast=   Toast.makeText(mContext, "Ringing",Toast.LENGTH_LONG);
               toast.show();
            }


        }
         if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
         {
            // Toast.makeText(mContext, "Recieved", Toast.LENGTH_LONG).show();
             toast.cancel();

         }
        if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))
        {
            //Toast.makeText(mContext, "IDLE", Toast.LENGTH_LONG).show();
             toast.cancel();
        }






    }
 }

では、ユーザーが着信を受信または拒否したときにトーストをキャンセルする方法は?

4

1 に答える 1

1

問題は、連続していくつかのトーストを作成していることです。1 つのトーストが終了すると、残りのトーストが順番に表示されます。基本的に 7 つの異なる Toast オブジェクトを作成していますが、最後のオブジェクトへの参照のみを保持しています。

必要なことは、Toast を 1 つ使用することです。の代わりにToast.LENGTH_LONG、別の値を使用します。その後、 を呼び出すことができるはずですcancel()

于 2013-01-04T07:34:02.530 に答える