代码之家  ›  专栏  ›  技术社区  ›  Shawn Lien

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

  •  0
  • Shawn Lien  · 技术社区  · 14 年前

    嘿,我正在开发一个应用程序,它需要将变量receive从broadcastreceiver传递到服务类

    我看到这个帖子了 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,充电状态为假,这意味着变量不会传递到sercive

    当人们指导我时,我已经将值分配给如上所示的变量,但这仍然不起作用

    这是我的主要节日,我想这里可能出了问题

                <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接收变量以执行该功能

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   AAnkit    14 年前

    你应该做下面这样的事情,你怎么能期望变量有值而不去分析它们

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

    以及从何处接收呼叫服务。

    你应该打电话 startService(intent); //这个意图应该是u分配/设置值的意图。

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

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

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