首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android无法将变量从广播接收器传递到其他类

Android无法将变量从广播接收器传递到其他类
EN

Stack Overflow用户
提问于 2012-07-19 13:51:15
回答 1查看 1.6K关注 0票数 0

嘿,我正在处理应用程序,需要将变量接收从broadcastreceiver传递到服务类

我已经看到这个帖子How to pass value from Broadcast receiver to Activity in android?,但它不工作。

以下是我的代码

代码语言:javascript
复制
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变量的服务类

代码语言:javascript
复制
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,充电状态为false,这意味着变量不会传递给sercive

按照人们的指导,我已经将值赋给了上面所示的变量,但这仍然不起作用

这是我的主要测试,我想这里可能有问题

代码语言:javascript
复制
            <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返回“导出的接收方不需要权限”

在我的应用程序中,服务将保持在后台运行,并尝试从backgroud接收器接收变量以执行此功能

我不知道我哪里做错了,如果你发现了错误,请告诉我,非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 13:58:10

你应该做一些像下面这样的事情,你怎么能期望变量有值而不赋值呢

代码语言:javascript
复制
batteryLevel   =    intent.getIntExtra("BatteryLevel", batteryLevel);
 batteryScale  =       intent.getIntExtra("BatteryScale", batteryScale);
   isCharging   =       intent.getBooleanExtra("Charging", isCharging);

并从接收方调用服务的位置。

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

代码语言:javascript
复制
intent.putExtra("BatteryLevel", batteryLevel);
intent.putExtra("BatteryScale", batteryScale);
intent.putExtra("Charging", isCharging);

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11554680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档