簡體   English   中英

在BroadCast Receiver中啟動活動導致應用程序崩潰

[英]Start activity in BroadCast Receiver causing app crash

我創建了一個應用程序,當我打開藍牙時,會顯示一個吐司並開始新的活動。 這是我的廣播接收器類:

public class BroadCast extends BroadcastReceiver {

    String prefs="myPrefs";
    String count="myCount";
    static int counter=0;
    Intent i;

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        String bluth = arg1.getAction();
        if (bluth.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            if(arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_ON){
                SharedPreferences sp = arg0.getSharedPreferences(prefs, Context.MODE_PRIVATE);
                Editor ed = sp.edit();
                ed.putInt(count, counter);
                ed.commit();
                counter++;
                Toast.makeText(arg0, "Bluetooth on " + sp.getInt(count, 0), Toast.LENGTH_LONG).show();
                i = new Intent(arg0, Indicators.class);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                arg0.startActivity(i);
                Indicators.on.setVisibility(View.VISIBLE);
            } else if (arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_OFF) {

            } else if (arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_TURNING_OFF) {

            } else if (arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_TURNING_ON) {

            }
        }
    }
}

現在沒有問題了。 活動開始,但是在上面的代碼中

Indicators.on.setVisibility(View.VISIBLE);

並運行該應用程序,它崩潰了!

其實on是一個textview obj我在定義Indicators class如下:

public class Indicators extends Activity {
    static TextView on, off, opening, closing;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.textviewbluetooth);

        opening = (TextView)findViewById(R.id.textView1);
        on = (TextView)findViewById(R.id.textView2);
        closing = (TextView)findViewById(R.id.textView3);
        off = (TextView)findViewById(R.id.textView4);
        opening.setVisibility(View.INVISIBLE);
        on.setVisibility(View.INVISIBLE);
        off.setVisibility(View.INVISIBLE);
        closing.setVisibility(View.INVISIBLE);
    }
}

我應該如何清除此錯誤?

class YourActivity extends xxxx {
   private static YourActivity mInst;

   public static YOurActivity instance() {
             return mInst;
   }

   /// Do your task here.
   public void setViewText(xxxx) ;

   @Override
   public void onStart() {
     ...
     mInst = this;
   }

   @Override
   public void onStop() {
     ...
     mInst = null;
   }
}

在您的BroadcastReceiver中:

YOurActivity inst = YOurActivity.instance();
   if(inst != null)  { // your activity can be seen, and you can update it's context 
       inst.setViewText...
   }

把這行

                on.setVisibility(View.VISIBLE);

在Activity中-> onCreate()方法。

不要從Activity本身外部使用對Text類的Activity類成員的靜態引用,因為它可能已被破壞或尚未創建。 一般來說,這是不好的做法。

編輯:如果您需要一個標志來顯示指標,請向“活動初學者”意圖添加其他內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM