2014-03-17 5 views
0

Я пытаюсь изменить свое текстовое изображение, но оно не работает.Невозможно изменить textview (broadcastreceiver)

MainActivity:

public void changeTxt(String txt){ 
    TextView t = (TextView) findViewById(R.id.wifiName); 
    t.setText(txt); 
} 

BroadcastReceiver:

MainActivity ma; 
@Override 
public void onReceive(Context context, Intent intent) { 
    ma= new MainActivity(); 
    int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 
         status == BatteryManager.BATTERY_STATUS_FULL; 

    int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 
    String txt = acCharge+""; 
    ma.changeTxt(txt); 
} 
+0

Вам необходимо зарегистрировать приемник вещания – deadfish

+0

Я зарегистрировался, но все еще не работает – lon23

+0

'ma = new MainActivity();' Я серьезно сомневаюсь, что вы должны это сделать. Android создает для вас объекты активности. Вы можете просто использовать намерение, чтобы спросить андроид, чтобы создать для вас действие. –

ответ

0

Вызов registerBroadCastReciever так:

//BroadCastReciever variable in base activity or activity 
     private BroadcastReceiver serviceBroadcastReceiver;   
//Register reciever method 
     void registerBroadcastReceiver(){ 
     if (serviceBroadcastReceiver != null) 
     { 
     LocalBroadcastManager.getInstance(this.getActivity()).unregisterReceiver(this.serviceBroadcastReceiver); 
      LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(this.serviceBroadcastReceiver, new IntentFilter("...BROADCAST_STR")); 
      return; 
     } 
     this.serviceBroadcastReceiver = new BroadcastReceiver() 
     { 
      public void onReceive(Context paramAnonymousContext, Intent paramAnonymousIntent) 
      { 
       //Recieve STH and call method like SetText() that initialize your textView text 
      } 
     }; 
     LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(this.serviceBroadcastReceiver, new IntentFilter("...BROADCAST_STR")); 
    }  //Then onResume & onPause methods in activity 
    @Override 
    public void onResume() { 
     super.onResume(); 
     registerBroadcastReceiver(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(this.serviceBroadcastReceiver); 
    } 
0

Попробуйте это:

MyActi Vity:

public class MyActivity extends Activity { 

    private TextView wifi; 
    private BateryReceiver bateryReceiver; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     wifi = (TextView) findViewById(R.id.wifiName); 
     wifi.setText("nothing"); 

     bateryReceiver = new BateryReceiver(wifi); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     registerReceiver(bateryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 

     unregisterReceiver(bateryReceiver); 
    } 
} 

BateryReceiver: (создать новый класс, если у вас нет)

public class BateryReceiver extends BroadcastReceiver { 

    private final TextView textView; 

    public BateryReceiver(TextView textView) 
    { 
     this.textView = textView; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
     boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 
       status == BatteryManager.BATTERY_STATUS_FULL; 

     int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     boolean ac = (chargePlug == BatteryManager.BATTERY_PLUGGED_AC); 
     boolean usb = (chargePlug == BatteryManager.BATTERY_PLUGGED_AC); 

     String plugSource = (ac == true)? "AC" : "USB"; 

     if(isCharging) 
      textView.setText("charging: " + isCharging + " by " + plugSource); 
     else 
      textView.setText("not charging"); 
    } 
} 

Он должен работать.

+0

Спасибо, человек. – lon23

+0

Я просто попробовал, не работает – lon23

+0

Вы уверены? Он должен работать – deadfish

Смежные вопросы