2014-10-11 106 views
-1

我想從BroadcastReceiver獲取字符串,它將在我的活動中設置TextView的內容。無法更改BroadcastReceiver中的TextView內容

我有兩個Java類

  1. MainActivity:它擁有我想要更改其文字TextView的。

  2. batteryinfo:它擴展了BroadcastReceiver。此類具有 方法,返回自定義串(的getString())

這裏是MainActivity的代碼

package com.example.batteryhealth; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.BatteryManager; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    BatteryManager bm; 
    TextView health; 
    String string; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     health=(TextView)findViewById(R.id.textView1); 
     //status=(TextView)findViewById(R.id.textView2); 
     batteryinfo bmc= new batteryinfo(bm,string); 
     this.registerReceiver(bmc, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

     health.setText(bmc.gethealth()); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    } 

這裏是batteryinfo的代碼:

package com.example.batteryhealth; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.BatteryManager; 

public class batteryinfo extends BroadcastReceiver{ 

    BatteryManager bm; 
    String health; 

    public batteryinfo(BatteryManager b,String hea) { 
     // TODO Auto-generated constructor stub 

     this.bm=b; 
     this.health=hea; 

    } 




    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     // TODO Auto-generated method stub 
    int i= intent.getIntExtra(bm.EXTRA_HEALTH, 0); 

     boolean s=true; 


     if(s=i==bm.BATTERY_HEALTH_COLD) 
     { 
      health="cold"; 

     } 
     else if(s=i==bm.BATTERY_HEALTH_GOOD) 
     { 
      health="good"; 
     } 
     else if (s=i==bm.BATTERY_HEALTH_OVERHEAT) 

     { 
      health="overheat"  ; 
     } 
     else if (s=i==bm.BATTERY_HEALTH_OVER_VOLTAGE) 
     { 
      health="overvolteage"; 
     } 

    } 

    public String gethealth() 
    { 
     return health; 
    } 

} 

如果我在MainActivity中創建了一個嵌套類(它也擴展了BroadcastReciver),那麼代碼工作正常,但創建一個單獨的類後,它不起作用,而且我的TextView是空的。

+1

放一個'Log.i'在'onReceive'文本,看看廣播是否收到? – 2014-10-11 09:18:23

+0

@MysticMagic是對的。我們需要更多細節。 – 2014-10-11 09:47:19

回答

0

註冊一個新的廣播接收器的MainActivity內,然後從你的batteryinfo類廣播發送到您的MainActivity類別和更改您的MainActivity的接收器