마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

동적리시버가 작동이 되지 않습니다.

0 추천
public class MainActivity extends Activity 
{		
	BluetoothAdapter bAdapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
//		bAdapter = BluetoothAdapter.getDefaultAdapter();
		//브로드캐스트 리시버 등록
		IntentFilter jinFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
		jinFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
		jinFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
		registerReceiver(bReceiver, jinFilter);
		
		
	}//onCreate
	
	@Override
	protected void onStop() 
	{
		super.onStop();
		//브로드캐스트리시버 해지
		unregisterReceiver(bReceiver);
		
	}

	//브로드캐스트 리시버
	private BroadcastReceiver bReceiver = new BroadcastReceiver() 
	{	
		@Override
		public void onReceive(Context context, Intent intent) 
		{
			bAdapter = BluetoothAdapter.getDefaultAdapter();
			final String action = intent.getAction();
			
			
			if(action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))
			{
				final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
						BluetoothAdapter.ERROR);
				
				switch(state)
				{
					case BluetoothAdapter.STATE_TURNING_ON:
						Intent intents = new Intent(context,MainActivity.class);
						intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
						//새 task를 띄움
						context.startActivity(intents);
						break;
					
				}
			}
			
		}
	};
}

 

안녕하세요.

원래는 manifest.xml에 정적으로 리시버를 추가했다가, 동적으로 리시버를 선언/해제하는 것으로 소스를 수정했습니다.

핸드폰의 블루투스가  on 될때[ 사용자가 환경설정 등에서 블루투스 활성화버튼 누름] 를 감지해서 

앱이 자동으로 켜지게[mainActivity.class] 하고싶은데요.. 반응이 없습니다..

stop 에서 브로드캐스트리시버를 해지해야 에러가 안나고.. 어떠한 점에서 문제가 있는지 모르겠습니다.ㅠ

제가 생각하기엔 unregisterReceiver(bReceiver); 때문에 브로드캐스트리시버에서 감지를 못하는거같은데..

다른 방법이 없을까요?..

+

이전에 수정하기전의 정적리시버에서는 앱을 종료한 홈화면에서 , 블루투스 on이 감지되면 앱이 실행되었습니다.

이런 경우엔 동적 리시버가 아닌 정적리시버로 해야하는걸까요?

anci (19,950 포인트) 님이 2014년 11월 11일 질문
anci님이 2014년 11월 11일 수정

1개의 답변

+1 추천
 
채택된 답변
이 경우에는 당연히 정적인 방식(AndroidManifest)을 사용해야 합니다.
익명사용자 님이 2014년 11월 11일 답변
anci님이 2014년 11월 11일 채택됨
감사합니다^^;다시 수정해야겠군요~ 혹시 질문 좀 더 드려도될까요?
정적 리시버를 사용했을 때, MainActivity와, receiver를 따로 분류해서 두개의 클래스로 생성 후, receiver 클래스는 BroadcastReceiver를 상속하는데요.
mainactivity나 다른 클래스의 변수를 사용하고 싶은데, 어떤식으로 할 수있을까요..? 메인액티비티에 리시버가 있는경우엔 변수나 함수를 사용할 수 있는데말이죠..
...