Android:设备启动时电池充电监视器无法自动启动

Android:设备启动时电池充电监视器无法自动启动,android,background-process,battery,autostart,Android,Background Process,Battery,Autostart,我正在尝试编写一个电池监控应用程序,它的功能之一是跟踪充电的时间和相关日期 首先,我使用SharedReferences编写了主活动类中的所有内容,它确实有效。然而,我希望即使在后台也能记录充电次数,所以我在谷歌上搜索并认为WakefulBroadcastReceiver+IntentService可能是最有效/最简单的方法 我错了。我被困在这里,我想我现在遇到的问题是,显示器的IntentService部分甚至没有启动!我想我可能在舱单上写错了什么,但我就是找不到 这是我的密码: Androi

我正在尝试编写一个电池监控应用程序,它的功能之一是跟踪充电的时间和相关日期

首先,我使用SharedReferences编写了主活动类中的所有内容,它确实有效。然而,我希望即使在后台也能记录充电次数,所以我在谷歌上搜索并认为WakefulBroadcastReceiver+IntentService可能是最有效/最简单的方法

我错了。我被困在这里,我想我现在遇到的问题是,显示器的IntentService部分甚至没有启动!我想我可能在舱单上写错了什么,但我就是找不到

这是我的密码:

AndroidManifest.xml

java

MainActivity.java太长,所以我不在这里发布。但是,它应该不会有任何问题,除非我必须调用活动文件中的BootReceiver/RechargeMonitor,我想我不必这样做,因为manifest+BootReceiver应该负责autostart,这甚至不会是一个问题

我现在遇到的问题是,监视器似乎没有启动,我没有看到任何祝酒词

我要确保的另一件事是,共享引用应该可以在同一个应用程序中的任何地方访问,只要我的名字是正确的。我已经在好几个地方看到了这一点,但我需要一个可靠的答案

谢谢

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mobiledevices.batteryapp" >
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >
    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".BootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <service
        android:name=".RechargeMonitor"
        android:exported="false" />
</application>
package com.mobiledevices.batteryapp;

import android.content.Intent;
import android.content.Context;
import android.support.v4.content.WakefulBroadcastReceiver;

public class BootReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent){
        Intent startServiceIntent = new Intent(context, RechargeMonitor.class);
        startWakefulService(context, startServiceIntent);
    }
}
package com.mobiledevices.batteryapp;

import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.content.SharedPreferences;
import android.os.BatteryManager;
import android.widget.Toast;

public class RechargeMonitor extends IntentService {

    public RechargeMonitor(){
        super("RechargeMonitor");
    }

    @Override
    protected void onHandleIntent(Intent intent){
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        this.registerReceiver(this.batteryinfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }

    private BroadcastReceiver batteryinfoReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT) &&
                    intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)!=0 &&
                    intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0)==BatteryManager.BATTERY_STATUS_CHARGING){
                SharedPreferences settings = getSharedPreferences(MainActivity.PREF_NAME, 0);
                SharedPreferences.Editor editor = settings.edit();
                int count = settings.getInt("COUNT", 0);
                editor.putInt("COUNT", count+1);
                editor.commit();
            }
        }
    };
}