为什么广播接收器不会连续触发?

时间:2014-03-16 03:51:47

标签: android gps broadcastreceiver

我有一个广播接收器,如果打开或关闭 GPS ,则显示祝酒词。我只是想知道为什么只要 GPS 保持开启就不会连续显示吐司。 请在下面找到我使用的代码。

 public class gpsbroad extends BroadcastReceiver implements LocationListener{

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
     if (enabled==true) {
            Toast.makeText(context, "gps on",
            Toast.LENGTH_SHORT).show();
            //Intent pushIntent = new Intent(context, LocalService.class);
            //context.startService(pushIntent);
        }
     else
     {
         Toast.makeText(context, "gps off",
                    Toast.LENGTH_SHORT).show();  
     }

     if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {
            Toast.makeText(context, "in android.location.PROVIDERS_CHANGED",
            Toast.LENGTH_SHORT).show();
            //Intent pushIntent = new Intent(context, LocalService.class);
            //context.startService(pushIntent);
        }
}

1 个答案:

答案 0 :(得分:0)

BroadcastReceiver“唤醒”当有Intent它有兴趣接收时。它将执行onReceive()中的代码,就是这样。实际上,除此之外,就系统而言,它也可能被破坏。

  

BroadcastReceiver对象仅在通话期间有效   to onReceive(Context,Intent)。一旦你的代码从此返回   功能,系统认为要完成的对象不再   活性

Toast只能在有限时间内显示Toast.LENGTH_SHORTToast.LENGTH_LONG。实际上,这些是您可以指定的唯一持续时间。

将两者放在一起,结果就是当你得到你想要的意图时,你会看到屏幕上弹出一条简短的信息。简而言之,只要GPS打开,您的代码就无法使Toast(或其他任何内容)保留在屏幕上。我建议您查看NotificationManager,但我真的不明白这一点 - 手机无论如何都会在系统状态栏中显示GPS图标。