0

BATTERY_CHANGED IntentFilter を持つ BroadcastReceiver があります。ブロードキャストを送信しようとすると、onReceive が呼び出されません。どうしたの?これがマニフェストの受信者の説明です

<receiver android:name=".receivers.BatteryReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BATTERY_CHANGED"/>
        </intent-filter>
    </receiver>

私のブロードキャストレシーバー

public class BatteryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("tag", "onRecv");
    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
    if (level != -1 && scale != -1) {
        float batteryPct = level / (float) scale;
        if (batteryPct < 30) {
            NotificationBuilder.notifyWithActions(context, R.drawable.ic_info_black_24dp,
                    context.getResources().getString(R.string.app_name),
                    context.getResources().getString(R.string.battery),
                    context.getResources().getInteger(R.integer.battery));
        }
    }
}`}

私は試します

LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(Intent.ACTION_BATTERY_CHANGED));
4

2 に答える 2

3

バッテリーレベル検出のためにこれをブロードキャストしようとしていますが、機能しません。次に、このタスクでは、MainActivity でブロードキャストを作成し、それをアクション Intent.ACTION_BATTERY_CHANGED に登録します。受信機を manifest.xml に登録する必要はなく、より適切に機能します。

ここで、Battery level が変更されるたびに、onReceive(Context c, Intent i) のブロック内の Broadcast 呼び出しとタスクが実行されます。

public class MainActivity extends Activity {
private BroadcastReceiver BatteryReceiver = new BroadcastReceiver() {
    public void onReceive(Context c, Intent i) {

        // Getting level of Battery   
        int level = i.getIntExtra("level", 0);
        Toast.makeText(MainActivity.this,"Battery Level:" +Integer.toString(level) + "%",
                    Toast.LENGTH_SHORT).show();
        // For any Level you have to check here.
        if (level == 100) {
            Toast.makeText(MainActivity.this, "Battery Full",
                    Toast.LENGTH_SHORT).show();
        }

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Register receiver with Action and no need to define Broadcast in manifest.xml
    registerReceiver(BatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
   }
}
于 2015-09-23T04:29:25.883 に答える
0

adb 経由で偽のシステム ブロードキャストを送信できます。

adb shell am broadcast "intent:#Intent;action=android.intent.action.BATTERY_CHANGED;i.status=5;i.voltage=4155;i.level=100;end"
于 2015-09-23T03:40:02.507 に答える