Code Monkey home page Code Monkey logo

somotiondetector's Introduction

SOMotionDetector

Simple library to detect motion for iOS by arturdev .

Based on location updates and acceleration.

###Requierments iOS > 6.0

Compatible with iOS 9

Works on all iOS devices (i.e. not need M7 chip)

This demo project also demonstrates how to use this library to relaunch the app from killed state.

USAGE

Copy SOMotionDetector folder to your project.

Link CoreMotion.framework, CoreLocation.framework.

Import "SOMotionDetector.h" file and set SOMotionDetector's callbacks

#import "SOMotionDetector.h

//...

[SOMotionDetector sharedInstance].motionTypeChangedBlock = ^(SOMotionType motionType) {
    //...
};
    
[SOMotionDetector sharedInstance].locationChangedBlock = ^(CLLocation *location) {
    //...
};

[SOMotionDetector sharedInstance].accelerationChangedBlock = ^(CMAcceleration acceleration) {
    //...    
};

If you need to know when location updates were automatically paused due to your app running in the background...

[SOMotionDetector sharedInstance].locationWasPausedBlock = ^(BOOL changed) {
    //...    
};

###NOTE! To Support iOS > 8.0 you must add in your info.plist file one of the following keys:
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription

To enable background location updates in iOS > 9.0 you must set allowsBackgroundLocationUpdates to YES

    [SOLocationManager sharedInstance].allowsBackgroundLocationUpdates = YES;

You are done!

Now to start motion detection just call

[[SOMotionDetector sharedInstance] startDetection];

To stop detection call

[[SOMotionDetector sharedInstance] stopDetection];

To start step counter call

    [[SOStepDetector sharedInstance] startDetectionWithUpdateBlock:^(NSError *error) {
        //...
    }];

###Detecting motion types

typedef enum
{
  MotionTypeNotMoving = 1,
  MotionTypeWalking,
  MotionTypeRunning,
  MotionTypeAutomotive
} SOMotionType;

CUSTOMIZATION

/**
 * Set this parameter to YES if you want to use M7 chip to detect more exact motion type. By default is No.
 * Set this parameter before calling startDetection method.
 * Available only on devices that have M7 chip. At this time only the iPhone 5S, the iPad Air and iPad mini with retina display have the M7 coprocessor.
 */
@property (nonatomic) BOOL useM7IfAvailable;

/**
 *@param speed  The minimum speed value less than which will be considered as not moving state
 */
- (void)setMinimumSpeed:(CGFloat)speed;

/**
 *@param speed  The maximum speed value more than which will be considered as running state
 */
- (void)setMaximumWalkingSpeed:(CGFloat)speed;

/**
 *@param speed  The maximum speed value more than which will be considered as automotive state
 */
- (void)setMaximumRunningSpeed:(CGFloat)speed;

/**
 *@param acceleration  The minimum acceleration value less than which will be considered as non shaking state
 */
- (void)setMinimumRunningAcceleration:(CGFloat)acceleration;

Installation with CocoaPods

CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries installation in your projects.

Podfile

pod "SOMotionDetector"

LICENSE

SOMotionDetector is under MIT License (see LICENSE file)

Author

arturdev, [email protected] matghazaryan, [email protected]

somotiondetector's People

Contributors

arturdev avatar l0gg3r avatar matghazaryan avatar ricsantos avatar sanderpick avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

somotiondetector's Issues

Calculate travel time

Is it possible to detect the timeslot when the user was travelling?

I'm only interested in the start and end time of my travel. And this even if the app is not running, like the Moves-app is doing.

Work in pocket?

Hello,

does it work CMMotionActivity when my iPhone in pocket?

background

app crashes when applicationWillEnterForeground is called, stop and restart detection doesn't help

cocoapod

Please, create a pod for your project to install it with cocoapods.

CMMotionActivity

Would you mind if i ask a question not relating to SOMotionDetector? Now i`m using M7 in ios to detect the status of device. I get a trouble that device sometimes detects wrong status. For example, when i shake my device the status turns into "in the car", while im not in the car. So can you show me how to decrease wrong detection. Thank you very much.

Support ios8

it's perfect ,but i expert it's location can use in ios8 foreground and background

False motion change event on load

The library gives a false motion change event on load. While the phone is still it returns the last state it remembers from last run. This should probably be avoided.

motionTypeChangedBlock does not fire when running in the background

Hi,

First things first, THANK YOU ! for this great library. Now to the question..., I am initiating SOMotionDetector in my App Delegate (didFinishLaunchingWithOptions). But when my app goes into background state, I do not get alerts.

My App Delegate --> didFinishLaunchingWithOptions contains:

... ... ... ...
[SOMotionDetector sharedInstance].motionTypeChangedBlock = ^(SOMotionType motionType)
{
[myClass MotionTypeChanged: motionType];
};
... ... ... ...

Is it something the software doesn't support or am I doing it wrong ?

Doesn't Ask for Authorization

At no point is there a call for requestWhenInUseAuthorization or requestAlwaysAuthorization for ios8 and ios9 support. I think this should either be asked upon startDetection and/or should be exposed to the developer to call whenever they see fit so that they can ask for it at the right time in their UX.

Either way this issue makes it really weird to get Core Location updates because we either have to edit your Pod or ask for it manually on an unused Location Manager instance.

1

2

iOS9 Background Location Support

Currently we cannot do background location updates with SOMotionDetector on iOS9

We have to expose a way to set the allowsBackgroundLocationUpdates property of the SOLocationManager's instance of CLLocationManager to YES or NO.

https://developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/Objective-C/CoreLocation.html

https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instp/CLLocationManager/allowsBackgroundLocationUpdates

Delegate not appropriate for Singleton

The use of a single delegate to receive callbacks doesn't really fit well with at singleton pattern. One option to remedy this is to change from a protocol for callbacks to notifications. Another option would be to remove the singleton part.

Not Working in Background

Hi, Thank you so much for your hard work.

I am trying to detect change in Activity type while the app is in background. It works perfectly in foreground but doesn't work in background. I have enabled background location update mode.

Thank you for your help.

Detection in background?

I am using the library and am trying to detect activity in the background. It works great for a while but after around 30 minutes idle in the background - updates stop occurring....Is this expected behavior?

Should updates continue until stop tracking is called (even when in background)?

I have followed instructions around configuration for background updates (plist, property on shared instance, etc...).

Running on iPhone 5s with 9.3.

Documentation not up to date?

In your documentation you write
[SOLocationManager sharedInstance].allowsBackgroundLocationUpdates = YES;

But I can't find this in code? The background mode is especially important for me.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.