小米开发平台小米计步器接口适配说明

计步器Sensor 5分钟上报一次数据,后台Service将计步数据记录插入本地数据库,若没有数据上报, 则不插入;

小米开发平台小米计步器接口适配说明

1.小米计步器简介 

收集手机中传感器的数据,通过机器学习算法判断步数。 

1.1 算法说明 

  • 计步器Sensor 5分钟上报一次数据,后台Service将计步数据记录插入本地数据库,若没有数据上报, 则不插入; 
  • app第一次请求数据会立即响应, 后台Service会立即返回给app最新的记录数据;
  • app在1分钟内多次请求数据, 则只有第一次得到的数据是最新的, 后面的请求结果和第一次相同; 
  • 一条记录只有一种计步模式.。例如, 用户在10分钟内有600步数据, 400步走路, 200步跑步, 则这10分钟会分拆成两条记录, 400步走路和200步跑步;
  • 只传给应用层3种计步模式: 0: 不支持(在不支持计步的手机上不会得到数据), 2: 走路, 3: 跑步。 

2.计步器接入 

2.1 判断本机是否支持计步 

使用miui.util.FeatureParser提供的接口去判断是否支持stepsProvider功能

//示例code
//在项目中新建一个工具类,FeatureParser,通过反射机制来获取miui.util.FeatureParser
public class FeatureParser {
    public static boolean getBoolean(String name, boolean defaultValue) {
        try {
            Class featureParserClass = Class.forName("miui.util.FeatureParser");
            Method method = featureParserClass.getMethod("getBoolean", String.class, boolean.class);
            return (Boolean) method.invoke(null, name, defaultValue);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return defaultValue;
    }
}

//在功能开始之前判断是否支持stepsProvider功能
boolean isSupport= FeatureParser.getBoolean("support_steps_provider",false); 

2.2 App采用ContentProvider的query请求获取计步数据 

接口格式: 

Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
参数必选类型范围说明
uritrueandroid.net.UriUri.parse(“content://” + “com.miui.providers.steps” + “/item”);取固定值
projectionfalseString[]可选列: “_id”, “_begin_time”, “_end_time”, “_mode”,  “_steps”获取指定列, 若为null则获取所有列
selectionfalseString从可选列中选取自定义条件获取满足条件的记录行, 若为null则获取所有行
selectionArgsfalseString[]一般为可选列的值Selection中带?的格式化参数
sortOrderfalseString从可选列中选取列升序(asc)或降序(desc), 可多个并列返回结果的记录行排序方式, 若为null则按id大小排序

2.3 返回结果: 满足查询条件的记录行

记录行的数据结构如下 

public class Step {
    private int mId; // 记录在sqlite的id
    private long mBeginTime; // 计步开始时间
    private long mEndTime; // 计步结束时间
    private int mMode; // 计步模式: 0:不支持模式, 1:静止, 2:走路, 3:跑步, 11:骑车, 12:交通工具 
    private int mSteps; // 总步数
}

3.代码示例

3.1 AndroidManifest.xml中声明权限 

 <uses-permission android:name=”miui.permission.READ_STEPS” />(不声明权限无法读取计步数据)。 

3.2 Query用到的数据结构 

public class Steps {
/* Data Field */
public static final String ID = "_id";
public static final String BEGIN_TIME = "_begin_time";
public static final String END_TIME = "_end_time";
// 0: NOT SUPPORT 1:REST 2:WALKING 3:RUNNING
public static final String MODE = "_mode";
public static final String STEPS = "_steps";
/* Default sort order */
public static final String DEFAULT_SORT_ORDER = "_id asc";
/* Authority */
public static final String AUTHORITY = "com.miui.providers.steps";
/* Content URI */
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/item");
}
public static String[] projection = new String[] {
Steps.ID,
Steps.BEGIN_TIME,
Steps.END_TIME,
Steps.MODE,
Steps.STEPS
};

3.3 返回结果的数据结构 

public class Step {
private int id;
private long mBeginTime;
private long mEndTime;
private int mMode;
private int mSteps;
}

3.4 查询方法示例 

public LinkedList<Step> getAllSteps(String selection, String[] args) {
LinkedList<Step> steps = new LinkedList<Step>();
Cursor cursor = resolver.query(Steps.CONTENT_URI, projection, selection, args,
Steps.DEFAULT_SORT_ORDER);
if (cursor.moveToFirst()) {
do {
Step s = new Step(cursor.getInt(0), cursor.getLong(1), cursor.getLong(2),
cursor.getInt(3),
cursor.getInt(4));
steps.add(s);
} while (cursor.moveToNext());
}
return steps;
}

编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/12524/

部分内容来自网络投稿,如有侵权联系立删

(0)
上一篇 2022年11月24日 下午1:59
下一篇 2022年11月24日 下午2:02

相关推荐