如何在android中创建MACROS

时间:2014-05-29 10:27:47

标签: android macros bluetooth automation video-capture

我想在Android中创建宏应用程序,这将帮助用户设置为用户执行计划任务的要求,如预定的视频录制(如Windows操作系统中的camstudio),GPS,蓝牙,摄像头控制。我知道必须根据设备做这些事情。

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).

实际上,除了预定视频录制之外,我还有代码可以执行所有操作。

你们可以帮助我 ..

干杯:)

2 个答案:

答案 0 :(得分:2)

您实际上不必使设备具有这些功能。你需要的是Service,它实现了各种监听器,例如:

  1. SensorListener到detect shaking of device
  2. BroadcastReceiver to fire when SMSs are received.
  3. Handle WiFi.
  4. 编辑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;
            }
        }
    

答案 1 :(得分:0)

您可以使用SpotRecorder(house4hack)代码尝试使用,该代码包含在后台启动RecorderService服务的活动(我们需要进行查看以使其不可见。这应该在服务中完成)< / p>

我们可以使用AlarmManager来设置特定时间的警报,当警报管理器通过使用意图再次启动您的服务来触发该时间时,可以使用相同的方法来停止您的应用程序。

不确定,但您可以尝试使用WindowManager并从服务中调用它。 看看这次失败的尝试here