0

ブロードキャスト レシーバの OnReceive() でトースト メッセージを制限する際に奇妙な問題が発生しました

wifiとbluetoothが有効/無効になっているときにトーストを表示するためのコードを書きました

ただし、wifiを有効/無効にすると、Bluetoothのトーストも表示され、その逆も同様です。つまり、Bluetoothとwifiを有効/無効にすると、4つのトーストメッセージすべてが1つずつ表示されます

私がやりたいことは、wifiがオフ/オンのときにトーストを1つ表示したいことと、Bluetoothの場合も個別に表示したいことです

お気に入り

 if WIFI is on  -  "wifi enabled"
 if WIFI is off -   "wifi disabled"
If bluetooth is on - "Bluetooth enabled"
If bluetooth is off - "Bluetooth disabled"

すべてではなく、一度に 1 つのトーストのみ

この問題を回避するにはどうすればよいですか?

これが私のコードです

  public class MyService extends BroadcastReceiver {
private WifiManager wifiManager;
@Override
public void onReceive(Context context, Intent arg1) {
    // TODO Auto-generated method stub

    wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
      BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

    if(wifiManager.isWifiEnabled()){  
        Toast.makeText(context.getApplicationContext(), "WIFI  Enabled", Toast.LENGTH_LONG).show();
    }else {    
        Toast.makeText(context.getApplicationContext(), "WIFI Disabled", Toast.LENGTH_LONG).show();
    }  
    if(adapter.isEnabled()){

        Toast.makeText(context.getApplicationContext(), "Bluetooth Enabled", Toast.LENGTH_LONG).show();

    }else {    
        Toast.makeText(context.getApplicationContext(), " Bluetooth Disabled", Toast.LENGTH_LONG).show();
    }
}
4

2 に答える 2

1

Wifiステータスが変更されるたびにレシーバーが呼び出されます。WifiとBluetoothの両方でトーストを表示しました。2つのトーストが表示されます。Bluetoothが有効または無効の場合はそうではありません。wifiが有効または無効のいずれでもありません。wifiとBluetoothの両方ステータスを有効または無効にします。

あなたの問題を解決するためにあなたは次のように試すことができます

public void onReceive(Context context, Intent arg1) {
    // TODO Auto-generated method stub
    if(arg1.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION))  {  
            wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            if(wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLED||wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLING){  
                  Toast.makeText(context.getApplicationContext(), "WIFI  Enabled", Toast.LENGTH_LONG).show();
            }else {    
                  Toast.makeText(context.getApplicationContext(), "WIFI Disabled", Toast.LENGTH_LONG).show();
            }
    }else {  
            BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
            if(adapter.isEnabled()){
                  Toast.makeText(context.getApplicationContext(), "Bluetooth Enabled", Toast.LENGTH_LONG).show();

            }else {    
                  Toast.makeText(context.getApplicationContext(), " Bluetooth Disabled", Toast.LENGTH_LONG).show();
            }  
     }            
}
于 2012-05-31T03:47:20.820 に答える
0

コードには 2 つの異なるif条件があります。これが、2 つの Toast が表示される唯一の理由です。ここで私の更新されたコードを見てください、それはあなたの問題を解決します。

public class MyService extends BroadcastReceiver 
{
    private WifiManager wifiManager;
    @Override
    public void onReceive(Context context, Intent arg1) 
    {
        // TODO Auto-generated method stub
        wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

        if(wifiManager.isWifiEnabled() )
        {  
            Toast.makeText(context.getApplicationContext(), "WIFI  Enabled", Toast.LENGTH_LONG).show();
        }
        else if (!wifiManager.isWifiEnabled() ) 
        {    
            Toast.makeText(context.getApplicationContext(), "WIFI Disabled", Toast.LENGTH_LONG).show();
        }  
        else if(adapter.isEnabled() )
        {
            Toast.makeText(context.getApplicationContext(), "Bluetooth Enabled", Toast.LENGTH_LONG).show();
        }
        else if  (!adapter.isEnabled() )
        {    
            Toast.makeText(context.getApplicationContext(), " Bluetooth Disabled", Toast.LENGTH_LONG).show();
        }  
    }
}
于 2012-05-31T04:00:23.643 に答える