2017-04-02 1 views
0

J'essaie d'obtenir le niveau actuel de la batterie en utilisant le récepteur de diffusion avec intentfilter ACTION_BATTERY_CHANGED ayant un seul TextView dans mon xml et définissant sa propriété de texte à une variable chaîne + entier qui devrait contenir la valeur de BatteryManager.EXTRA_LEVEL. Mais l'application se bloque à chaque fois qu'elle essaie de démarrer. Ai-je raté quelque chose?L'utilisation de BroadcastReceiver pour vérifier le niveau de la batterie, mais le crash de l'application?

MainActivity.java

public class MainActivity extends AppCompatActivity { 
TextView tvcl=(TextView) findViewById(R.id.tvcl); 

private BroadcastReceiver bcr=new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     int currentLevel=intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1); 
     tvcl.setText("Current Battery Level "+ Integer.toString(currentLevel) + "%"); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    IntentFilter bcFilter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    registerReceiver(bcr,bcFilter); 
} 

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

+0

il vous manque la trace de pile – efekctive

Répondre

1

La ligne

TextView tvcl=(TextView) findViewById(R.id.tvcl); 

semble être dans la définition de la classe et non dans une méthode. Si tel est le cas, il renverra une valeur nulle car ContentView n'est pas défini avant OnCreate, alors que cette définition se produit au moment de la création de l'objet.

+0

Thanx. Aidé beaucoup –

+0

@SilentCoder Pourquoi avez-vous "inacceptable" ma réponse? N'importe quelle raison? – theblitz

+0

J'ai accepté votre réponse. Peut-être que je n'ai pas assez de réputation pour voter. –