2017-02-06 9 views
1

アプリケーション全体でブルートゥースを有効にする必要がありますが、どうすればいいですか?アプリケーション全体でブルートゥースを有効にする方法

私が主なアクティビティを使用しているとき、コードは素晴らしいです。しかし、私が別のアクティビティに行き、BTブロードキャストを無効にすると、BTを有効にする信号が送られますが、その後は "onActivityResult"メソッドが呼び出されることはありません。

グローバルに必要なBTを書くにはどうしたらいいですか?私のアプリケーションのすべてのアクティビティ(および設定)。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    switch (requestCode) 
    { 
     case Bluetooth.REQUEST_ENABLE_BLUETOOTH: 
      if (resultCode == RESULT_OK) 
      { 
       // some stuff here 
      } 
      else 
      { 
       // exitapp(); 
      } 
      break; 
    } 
} 

受信機

protected final BroadcastReceiver mReceiver = new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      if (intent.getAction().equals(BluetoothAdapter.ACTION_STATE_CHANGED)) 
      { 
       final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 
         BluetoothAdapter.ERROR); 

       if(state == BluetoothAdapter.STATE_OFF) 
       { 
        startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), Bluetooth.REQUEST_ENABLE_BLUETOOTH); 
       } 
      } 
     } 
    }; 

そしてもちろん

startReceiver(mReceiver); // onCreate() 
stopReceiver(mReceiver); // onDestroy() 

どうもありがとうございました。

更新:別のアクティビティに行くと、受信者は再び動作しません(おそらくonDestroy()で停止しています)?私は知らない、おそらく私はすべての活動にレシーバーを配置する必要がありますか?ああ、私はそれが本当でないことを願っています。

import android.app.Service; 
import android.bluetooth.BluetoothAdapter; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.IBinder; 

public class BluetoothService extends Service { 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); 
     this.registerReceiver(bluetoothReceiver, intentFilter); 
    } 

    @Override 
    public void onDestroy() { 
     if (bluetoothReceiver != null) { 
      this.unregisterReceiver(bluetoothReceiver); 
     } 
     super.onDestroy(); 
    } 

    public BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      if (intent.getAction().equals(BluetoothAdapter.ACTION_STATE_CHANGED)) 
      { 
       final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); 
       Intent x = new Intent("btfilter"); 
       intent.putExtra("state", state); 
       sendBroadcast(x); 
      } 
     } 
    }; 
} 

MainActivityのonCreate

btintent= new Intent(this, BluetoothService.class); 
     startService(btintent); 
registerReceiver(mServiceUpdatesReceiver, new IntentFilter("btfilter")); 

MainActivity onDestroy()あなたがServiceを使用することを検討すべきである

unregisterReceiver(mServiceUpdatesReceiver); 

受信機

private BroadcastReceiver mServiceUpdatesReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     int state = intent.getIntExtra("state", -1); 

     if(state == BluetoothAdapter.STATE_OFF) 
     { 
      // enable request 
     } 
    } 
}; 

答えて

0

。アプリを閉じても機能します。あなたがそれについて何も知らなければ、簡単な説明:それはユーザーインターフェイスのないコンテキストです。

+0

ありがとうございます、私の質問を更新しました...私はおそらく間違って何かをしています、あなたはそれを見ることができますか?これは以前のバージョンのhahaのように動作しますが、違いはありません。 –

+0

ちょうど1つの違いは、btは別のアクティビティでは要求されません。 –

関連する問題