ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android Charge intent没有额外的数据

2019-08-31 07:26:54  阅读:204  来源: 互联网

标签:android android-intent broadcastreceiver


我正在尝试在充电状态发生变化时在特定活动中显示警报.
这是我的接收器类:

public class BatteryChargeReceiver extends BroadcastReceiver {
private String TAG = "receiver";
private ChargeReceiverCallback callback;

public BatteryChargeReceiver(ChargeReceiverCallback callback) {

    this.callback =callback;
    Log.v(TAG,"Inside  Constructor (Callback)");
}

public interface ChargeReceiverCallback {
    public void onReceive(Intent intent);
}

@Override
public void onReceive(Context context, Intent intent) {
    callback.onReceive(intent); 

}

}

以下是我从MainActivity的onResume实例化它的方法. MainActivity实现我的界面并覆盖onReceive(intent).我发现在任何阶段都没有intent.getIntExtra(BatteryManager.EXTRA_STATUS,-1)返回-1,然后返回-1.

BatteryChargeReceiver batteryReceiver = new BatteryChargeReceiver(this);
    IntentFilter filterPower = new IntentFilter("android.intent.action.ACTION_POWER_CONNECTED");
    registerReceiver(batteryReceiver, filterPower);

解决方法:

Intent.ACTION_POWER_CONNECTED没有提供当前的插件状态 – 这可能是API工作方式的变化,但我无法在文档中找到任何提及此类更改的内容.

广播Intent.ACTION_POWER_CONNECTED从未打算接收当前的插件类型,但它只是让电源连接的接收端(ref.).实际上,BatteryService.java播放普通意图而没有任何额外的值(截至本文撰写时为410~412行):

Intent statusIntent = new Intent(Intent.ACTION_POWER_CONNECTED);
statusIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
mContext.sendBroadcastAsUser(statusIntent, UserHandle.ALL);

但是,下面的代码

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="19" />

在Nexus 5上工作:

public class MainActivity extends Activity {
    private static final String TAG = "PowerReceiver";

    private final BroadcastReceiver mPowerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
                Log.d(TAG, "Power connected");
                checkPluggedState(context, intent);
            } else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
                Toast.makeText(context, "Power disconnected", Toast.LENGTH_SHORT).show();
            } else {
                Log.wtf(TAG, "Unknown action: " + action);
            }
        }
    };

    private void checkPluggedState(Context context, Intent intent) {
        Intent chargingIntent = registerReceiver(null, new IntentFilter(
                Intent.ACTION_BATTERY_CHANGED));
        final int pluggedState = chargingIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        final String msg;
        switch (pluggedState) {
            case 0:
                msg = "The device is running on battery";
                break;
            case BatteryManager.BATTERY_PLUGGED_AC:
                msg = "Plugged into AC charger";
                break;
            case BatteryManager.BATTERY_PLUGGED_USB:
                msg = "Plugged into USB charger";
                break;
            case BatteryManager.BATTERY_PLUGGED_WIRELESS:
                msg = "Plugged into wireless charger";
                break;
            default:
                msg = "Unknown state: " + pluggedState;
        }

        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_POWER_CONNECTED);
        filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
        registerReceiver(mPowerReceiver, filter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mPowerReceiver);
    }
}

希望这可以帮助.

标签:android,android-intent,broadcastreceiver
来源: https://codeday.me/bug/20190831/1773904.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有