2011-10-02 48 views
0

我想弄清楚如何实现一个事件监听器(不确定这是否是合适的术语)。我希望服务在我的应用程序启动后能够监听手机的电源状态。我不确定Android是如何处理这种情况的,所以不知道要搜索什么。我一直在使用这个使用广播接收器的代码:Android:创建一个持久性事件监听器

BroadcastReceiver receiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      unregisterReceiver(this); 
      int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
      if (plugged == BatteryManager.BATTERY_PLUGGED_AC) { 
       // on AC power 
       Toast.makeText(getApplicationContext(), "AC POWER", Toast.LENGTH_LONG).show(); 
      } else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) { 
       // on USB power 
      Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show(); 
       startActivity(alarmClockIntent); 
      } else if (plugged == 0) { 
       Toast.makeText(getApplicationContext(), "On Battery", Toast.LENGTH_LONG).show(); 
      } else { 
       // intent didnt include extra info 
      } 
     } 
    }; 
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    registerReceiver(receiver, filter); 

代码工作正常。当我打开我的应用程序时,它会烤干手机电源的当前状态。

这里就是我想要做:

  • 当用户启动应用程序,它是有效的服务
  • 用户就可以用手机打开,但一旦插入在我的服务将捕捉并使用上面的代码

如何适应此代码以实现上述目标?

+0

您是在问用户插入AC/USB电源但未插入用户时如何在代码中触发相同的操作目前没有使用你的应用程序(用你的话来说“开始使用手机”)? – momo

+0

是的,确切地说。我不确定正确的行话。 – Nick

回答

1

你可以通过删除线

 
unregisterReceiver(this); 

这样保持监听器的电池状态,应用程序将继续听取背景电源状态的变化,即使该应用程序没有运行在前台。请注意,在某些时候,您可能仍想取消注册您的接收器。您可能希望允许用户通过设置来控制它。

另外一个音符,你的代码包含在下面的代码接收器启动活动:


else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) { 
    // on USB power 
    Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show(); 
    startActivity(alarmClockIntent); 
} 

如果你的活动是在后台则无法启动另一项活动。请参阅this SO Question - how to start activity when the main activity is running in background?,接受的答案有关如何处理需要从后台启动活动的情况的建议