Search code examples
androidmacrosbluetoothautomationvideo-capture

How to create MACRO'S in android


I want to create macro app in Android, which will help user to set the requirement to do schduled tasks for the user like scheduled video recording like (camstudio in windows OS),GPS,Bluetooth,Camera control. I know have to ROOT the device to do these things..

Advance Features :    
• Shake the device to upload the last photo to Facebook.    
• Turn on Wi-fi or Data connection when you launch a particular app (and off again when closed).
• Respond to an incoming SMS by sending your current location.    
• Toggle the power button to tell you the time (e.g. when its in your pocket).    
• Use NFC tags to configure the device (turn on bluetooth, set volume etc).

Actually I have code for doing all the things except scheduled video recording.

Can you guys help me in that part only..

Cheers :)


Solution

  • You don't actually have to Root the device to have these features. What you need is a Service which implements various listeners such as :

    1. SensorListener to detect shaking of device.
    2. BroadcastReceiver to fire when SMSs are received.
    3. Or Handle WiFi.

    Edit 1 :

    public class RecorderService extends Service {
            private static final String TAG = "RecorderService";
            private SurfaceView mSurfaceView;
            private SurfaceHolder mSurfaceHolder;
            private static Camera mServiceCamera;
            private boolean mRecordingStatus;
            private MediaRecorder mMediaRecorder;
    
            @Override
            public void onCreate() {
                mRecordingStatus = false;
                //mServiceCamera = CameraRecorder.mCamera;
                mServiceCamera = Camera.open();
                mSurfaceView = CameraRecorder.mSurfaceView;
                mSurfaceHolder = CameraRecorder.mSurfaceHolder;
    
                super.onCreate();
                if (mRecordingStatus == false)
                    startRecording();
            }
    
            @Override
            public IBinder onBind(Intent intent) {
                // TODO Auto-generated method stub
                return null;
            }
    
            @Override
            public void onDestroy() {
                stopRecording();
                mRecordingStatus = false;
    
                super.onDestroy();
            }   
    
            public boolean startRecording(){
                try {
                    Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show();
    
                    //mServiceCamera = Camera.open();
                    Camera.Parameters params = mServiceCamera.getParameters();
                    mServiceCamera.setParameters(params);
                    Camera.Parameters p = mServiceCamera.getParameters();
    
                    final List<Size> listSize = p.getSupportedPreviewSizes();
                    Size mPreviewSize = listSize.get(2);
                    Log.v(TAG, "use: width = " + mPreviewSize.width 
                                + " height = " + mPreviewSize.height);
                    p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
                    p.setPreviewFormat(PixelFormat.YCbCr_420_SP);
                    mServiceCamera.setParameters(p);
    
                    try {
                        mServiceCamera.setPreviewDisplay(mSurfaceHolder);
                        mServiceCamera.startPreview();
                    }
                    catch (IOException e) {
                        Log.e(TAG, e.getMessage());
                        e.printStackTrace();
                    }
    
                    mServiceCamera.unlock();
    
                    mMediaRecorder = new MediaRecorder();
                    mMediaRecorder.setCamera(mServiceCamera);
                    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
                    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
                    mMediaRecorder.setOutputFile("/sdcard/video.mp4");
                    mMediaRecorder.setVideoFrameRate(30);
                    mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
                    mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
    
                    mMediaRecorder.prepare();
                    mMediaRecorder.start(); 
    
                    mRecordingStatus = true;
    
                    return true;
                } catch (IllegalStateException e) {
                    Log.d(TAG, e.getMessage());
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    Log.d(TAG, e.getMessage());
                    e.printStackTrace();
                    return false;
                }
            }
    
            public void stopRecording() {
                Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show();
                try {
                    mServiceCamera.reconnect();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                mMediaRecorder.stop();
                mMediaRecorder.reset();
    
                mServiceCamera.stopPreview();
                mMediaRecorder.release();
    
                mServiceCamera.release();
                mServiceCamera = null;
            }
        }