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

Service에서 카메라 동작을 Broadcast receiver로 잡아내려는데 동작을 안하네요... 조언좀 부탁드립니다.

0 추천

1. 만들고자 하는 기능

 -어플에서 버튼을 누르면 그 뒤엔 액티비티를 띄우지 않은 상태에서 스마트폰에 built-in되어있는 카메라로 사진을 찍으면 이벤트를 감지해서 원하는 행위를 하려는 것입니다.

 

2.현재 구현한 로직

 -어플의 메인화면에서 임의의 버튼을 누르면 startservice(intent)메소드로 service를 실행시킵니다. 그 service의 onStartCommand메소드 내에서 registerReceiver메소드를 이용해 broadcast receiver를 등록합니다. 그러면 액비티비티를 없애고 카메라로 사진을 찍었을 때 이벤트를 잡아낼 수 있을 거라고 생각했습니다.

 

3. 현재 구현한 코드

package com.example.samsung.service;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class CameraService extends Service {

	public static final String ACTION_NEW_PICTURE = "com.android.camera.NEW_PICTURE";
	private CameraReceiver camerareceiver = new CameraReceiver();

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


		Log.i("CameraService", "onCreate");

	}

	public int onStartCommand(Intent intent, int flags, int startId) {
		super.onStartCommand(intent, flags, startId);

		IntentFilter filter = new IntentFilter(ACTION_NEW_PICTURE);
		camerareceiver = new CameraReceiver();
		registerReceiver(camerareceiver, filter);
		Log.i("CameraService", "onStartCommand");
		return START_REDELIVER_INTENT;
	}

	public void onDestroy() {
		super.onDestroy();

		if (camerareceiver != null) {
			unregisterReceiver(camerareceiver);
			camerareceiver = null;
		}
		Log.i("CameraService", "onDestroy");

	}

	public IBinder onBind(Intent arg0) {
		return null;
	}

	public class CameraReceiver extends BroadcastReceiver {

		// public CameraReceiver(){}

		public void onReceive(Context context, Intent intent) {

			String action = intent.getAction();

			if (action.equals(ACTION_NEW_PICTURE)) {
				Log.i("CameraReceiver", "CameraReceiver의 onReceive 성공");
				Toast.makeText(context, "CameraReceiver의 onReceive 동작 성공!!",
						Toast.LENGTH_LONG).show();
			}
			else {
				Log.i("CameraReceiver", "CameraReceiver의 onReceive 실패");
				Toast.makeText(context, "CameraReceiver의 onReceive 동작 실패ㅜㅠ",
						Toast.LENGTH_LONG).show();
			}
				

			// Uri uri = intent.getData();

			// Log.d("CameraReceiver", "URI ="+uri);
		}

	}
}

  

4. 문제점

 -원래대로라면 어플을 실행시키고 버튼을 누르면 service가 동작하고 그 안의 broadcast receiver도 동작하기 때문에 홈 버튼을 눌러 어플을 나간 뒤 카메라를 실행해 사진을 찍으면 Toast와 log가 나타나야 하는데 나타나지 않습니다...  고수님들 조언좀 부탁드립니다 ㅠ

익명사용자 님이 2014년 4월 20일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...