0

嘿,我正在开发需要将变量接收从广播接收器传递到服务类的应用程序

我已经看到这篇文章 How to pass value from Broadcast receiver to Activity in android? 但它不起作用。

这是我的代码

public class BatteryReceiver extends BroadcastReceiver {
int batteryLevel;
int batteryScale;
private int status;
private boolean isCharging;
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Log.v("test battery", "battery:" + batteryLevel);
    batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
    batteryScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);

    //Log.v("charging state", "state:" + isCharging);
    status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    isCharging = status == BatteryManager.BATTERY_STATUS_FULL||status == BatteryManager.BATTERY_STATUS_CHARGING;

    Intent service = new Intent(context, MyService.class);      
    service.putExtra("BatteryLevel", batteryLevel);
    service.putExtra("BatteryScale", batteryScale);
    service.putExtra("Charging", isCharging);
context.startService(service);
}

}

接收 3 个变量的服务类

public class MyService extends Service {
int batteryLevel;
int batteryScale;
private boolean isCharging;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    batteryLevel = intent.getIntExtra("BatteryLevel", batteryLevel);
    batteryScale = intent.getIntExtra("BatteryScale", batteryScale);
    isCharging = intent.getBooleanExtra("Charging", isCharging);

    Log.v("test battery", "battery:" + batteryLevel);
    Log.v("charging state", "state:" + isCharging);

           //other method

           return Service.START_STICKY;
}

最后日志总是显示电池电量为0,充电状态为假,这意味着变量没有传递给服务

正如人们指导我的那样,我已将值分配给如上所示的变量,但这仍然行不通

这是我的主要活动,我认为这里可能有问题

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MyApp">
    </activity>

    <service 
        android:name=".MyService"
        android:enabled="true">
    </service>

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

</application>

在接收器部分,eclispe 返回“导出的接收器不需要许可”

在我的应用程序中,该服务将继续在后台运行并尝试从 braodcastreceiver 接收变量以执行该功能

我不确定我做错了哪一部分,如果您发现错误请告诉我,非常感谢。

4

1 回答 1

1

你应该做类似下面的事情,你怎么能期望变量有价值而不考虑它们

batteryLevel   =    intent.getIntExtra("BatteryLevel", batteryLevel);
 batteryScale  =       intent.getIntExtra("BatteryScale", batteryScale);
   isCharging   =       intent.getBooleanExtra("Charging", isCharging);

并从哪里接收器呼叫服务。

你应该调用startService(intent);// 这个意图应该是你分配/设置值的那个。

intent.putExtra("BatteryLevel", batteryLevel);
intent.putExtra("BatteryScale", batteryScale);
intent.putExtra("Charging", isCharging);

就像在上面的代码中一样,您将值设置为意图,但没有将此意图传递给服务,调用startService(intent);并在服务中获取onstart()方法中的这些值

在接收器中,您将服务名称设置为 WifiService.class,而您的服务名称是 MyService,这怎么可能。使其成为单一名称

于 2012-07-19T05:58:10.383 回答