정적 리시버로 브로드캐스트리시버를 상속하는 bReceiver라는 클래스를 따로 만들었습니다.
(MainActivity.java클래스는 따로 있습니다)
거기서, 블루투스가 켜졌을 때 조건문 아래에
Log.d("bluettoh is on","popup");
Intent intents = new Intent(context, MainActivity.class);
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//새 task를 띄움
context.startActivity(intents);
이런식으로, mainActivity를 새로 띄우는 소스를 작성하였는데요,
intent~startActivity가 특정 class를 시작해주는 기능인건 알고있는데 context를 앞에 붙이는 이유가 무엇인지 궁금합니다.
또한, else문으로 위의 조건문이 맞지 않은 경우 앱을 실행시키는 것이 아니라 종료시키고자 하는데요,
finish();가 안되더라구요. 종료되는 주체가 달라서 그런건지....mainActivity자체를 종료시키고자 할 때엔어떻게 해야하는지요?
+
소스 추가합니다.
메인액티비티는 수정할 부분이 전혀없어서 리시버쪽 클래스 소스만 올려봅니다.
//브로드캐스트리시버
public class bReceiver extends BroadcastReceiver
{
BluetoothAdapter bAdapter;
@Override
public void onReceive(Context context, Intent intent)
{
bAdapter = BluetoothAdapter.getDefaultAdapter();
if(bAdapter.getState()==BluetoothAdapter.STATE_TURNING_ON
||bAdapter.getState()==BluetoothAdapter.STATE_ON)
{
// //블루투스가 켜졌을 때 무조건..
Log.d("bluettoh is on","popup");
Intent intents = new Intent(context, MainActivity.class);
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//새 task를 띄움
context.startActivity(intents);
}
else if(bAdapter.getState()==BluetoothAdapter.STATE_TURNING_OFF)
{
Log.d("bluetooth is off","not popup");
//이렇게 등록된 리시버는 등록한 액티비티가 사라지거나 하면 등록이 해제되는 단점이 있어 죽지 않는 서비스에서 등록합니다
}
}
};