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가 나타나야 하는데 나타나지 않습니다... 고수님들 조언좀 부탁드립니다 ㅠ