安卓:ACTION_BATTERY_LOW不是在模拟器触发。 在代码注册接收机,而不是表现(An

2019-08-05 08:58发布

我看到其中提及的帖子registerReceiver有被称为(清单中没有定义)来接收ACTION_BATTERY_LOW意图。

public class MainActivity extends Activity
{

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       //....  
      registerReceiver(new BatteryLevelReceiver(), new IntentFilter(
                                              Intent.ACTION_BATTERY_LOW));
   }
   // .......
}

广播接收器

public class BatteryLevelReceiver extends BroadcastReceiver
{
    private static final String TAG = BatteryLevelReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d(TAG, "onReceive");
    }
}

我没有看到在logcat中的“的onReceive”日志语句。 我使用模拟器来模拟电池低状态时,使用telnet 5554和执行power capacity 10 。 我看到电池状态在模拟器改变,但无意触发。

另外,如果我有打电话给registerReceiver()的活动中,我不叫unregisterReceiveronStoponDestroy ,是它好吗? 如果不行,我怎么会注册一个接收器接收系统的意图,即使我的应用程序是不是在前台? (除了使用清单)。

Answer 1:

您可以在清单中添加以下代码。

<receiver android:name=".yourpackage.BroadCastNotifier" >
  <intent-filter>
    <action android:name="android.intent.action.BATTERY_LOW" />
  </intent-filter>
</receiver>

在您的BroadCastNotifier Class

package yourpackage;


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BroadCastNotifier extends BroadcastReceiver {
    private final static String TAG = "BroadCastNotifier"; 
    @Override
    public void onReceive(Context context, Intent intent) {
        String intentAction = intent.getAction();

        if(Intent.ACTION_BATTERY_LOW.equalsIgnoreCase(intentAction)){
            Log.e(TAG, "GOT LOW BATTERY WARNING");          
        }
    }

}

您将收到日志消息GOT LOW BATTERY WARNING当电池电量低时,也是在您的设备尝试。

虽然上面的代码可能工作的最好办法是不使用广播对这种行动,你可以监控电池的水平在这里描述 。 您可以确定下面是比较容易的方式代码您的电池。

int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale; 


Answer 2:

确保:1.您正在设置“连接充电器”“无” 2.这电池状态为“放电”



Answer 3:

关键是要禁止使用telnet命令充电

power ac off

如果你那么电池级别设置为低容量

power capacity 1

意图将被触发



Answer 4:

你可以注册ACTION_BATTERY_LOW在清单-见我详细的解答在这里 -你不能注册ACTION_BATTERY_CHANGED在清单。

您没有收到它的原因可能是你忘了申报你的接收器清单

另外,如果我有打电话给registerReceiver()的活动中,我不叫unregisterReceiveronStoponDestroy ,是它好吗?

不,你应该在注册onResume和注销onPause ALWAYS -之后onPause被称为接收机无论如何也不会接受

如果不行,我怎么会注册一个接收器接收系统的意图,即使我的应用程序是不是在前台? (除了使用清单)。

只有在清单



文章来源: Android: ACTION_BATTERY_LOW not triggered in emulator. Receiver registered in code, not manifest