Giter Club home page Giter Club logo

mijiasdk's People

Contributors

dingjikerbo avatar haojianxiu avatar jianhuih avatar m201370367 avatar snoorz avatar wangchongwhut 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  avatar  avatar  avatar  avatar  avatar

mijiasdk's Issues

账号登陆的情况下,绑定设备崩溃

java.lang.NumberFormatException: For input string: ""
at java.lang.Long.parseLong(Long.java:455)
at java.lang.Long.valueOf(Long.java:542)
at com.miot.service.connection.wifi.b.c.a(BleComboStep.java:686)
at com.miot.service.connection.wifi.b.c.j(BleComboStep.java:645)
at com.miot.service.connection.wifi.b.c.a(BleComboStep.java:129)
at com.miot.service.connection.wifi.SmartConfigMainActivity$1.handleMessage(SmartConfigMainActivity.java:48)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6359)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

插件中的callSmarthomeApi 其中有一个支持host (hostPrefix) 独立app 是否可以支持

/**
* ApiLevel:58 调用智能家居后台http服务
*
* @param model 插件model
* @param hostPrefix HOST前缀
* @param relativeUrl 服务接口url
* @param method 请求方法
* @param params
* @param callback
* @param parser
*/
public abstract void callSmartHomeApi(String model, String hostPrefix, String relativeUrl, String method, JSONObject params,
final Callback callback, final Parser parser);

获取到的信息解析出错,实体类无法修改,也看不到原始数据

2018-10-15 11:14:04.271 6683-6704/com.mijiasdk.demo E/DeviceManager: getRemoteDeviceList onFailed: 1011 org.json.JSONException: Value EjY8xK+G of type java.lang.String cannot be converted to JSONObject
2018-10-15 11:14:04.272 6683-6704/com.mijiasdk.demo E/MiDeviceManager: getRemoteDeviceList onFailed: 1011org.json.JSONException: Value EjY8xK+G of type java.lang.String cannot be converted to JSONObject
2018-10-15 11:14:04.277 6683-6683/com.mijiasdk.demo D/DeviceListActivity: action: con.mi.test.action.DISCOVERY_DEVICE_FAILED
2018-10-15 11:14:04.325 6683-6683/com.mijiasdk.demo I/Toast: Show toast from OpPackageName:com.mijiasdk.demo, PackageName:com.mijiasdk.demo

获取设备列表时 binder died

系统:Android 9 MIUI10.3.2
SDK版本:
compile 'com.miot.bluetooth:mijia:3.3.14@aar'
compile 'com.miot.api:mijia:3.3.14@aar'
compile 'com.miot.service:mijia:3.3.14@aar'
compile 'com.xiaomi.account:oauth-android:2.0.9'

之前所有操作正常(
MiotManager.getInstance().initialize(getApplicationContext());
MiotManager.getInstance().setAppConfig(appConfig);
MiotManager.getPeopleManager().savePeople(people);)

当调用MiotManager.getDeviceManager().getRemoteDeviceList(mDeviceHandler);时报错:
image

image
image

日志文件:
log.txt

自建一个APP,提示 bind service failed

步骤都是跟着文档走了,甚至代码都是直接copy了,AppConfig中替换了自己key,id。
然后MiotManager.getInstance().open() 就是绑定不成功,然后我把自己写的application替换了testapplication,demo是正常的。请问是不是漏了什么
环境:
Android9.0
mijiaClient-3-3-14
日志
D/MiotManager: open
D/MiotManager: start wait service connect
E/MiotManager: bind service failed

获取设备属性超时,rpc timestamp time out

sdk版本:3.3.3

从Iot平台获取属性参数是可以正常获取到的,但是从SDK中获取属性信息报如下错误:

09-05 14:47:29.825 26073-26132/com..app:miot D/DeviceManipulatorImpl: readProperty: [77516639].[urn:schemas-mi-com:service:xxxx:BaseService:1]
09-05 14:47:29.836 26073-26130/com.
.app:miot D/miio-JNI: hencrypt begin
hencrypt begin, did 18446744073709551615 stamp 4294967295
09-05 14:47:31.840 26073-26130/com..app:miot E/miio-localapi: rpc timestamp time out, retry 1
09-05 14:47:33.844 26073-26130/com.
.app:miot E/miio-localapi: rpc timestamp time out, retry 2
09-05 14:47:35.849 26073-26130/com..app:miot E/miio-localapi: rpc timestamp time out, retry 3
09-05 14:47:35.850 26073-26130/com.
.app:miot E/miio-localapi: java.net.SocketTimeoutException: Receive timed outjava.net.SocketTimeoutException: Receive timed out
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:147)
at java.net.DatagramSocket.receive(DatagramSocket.java:813)
at com.xiaomi.miio.MiioLocalAPI.udp_receive(MiioLocalAPI.java:91)
at com.xiaomi.miio.MiioLocalAPI.rpc(MiioLocalAPI.java:684)
at com.miot.service.b.a.c.a(LanChannel.java:33)
at com.miot.service.b.b.executeRequest(GetPropertyTask.java:45)
at com.miot.service.common.d.e.run(MiotTask.java:39)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:760)
09-05 14:47:35.851 26073-26130/com.***.app:miot D/LanChannel: onResponse: {"code":-3,"message":"request time out"}

使用showUserLicenseHtmlDialog方法出错。

你好,我在使用mHostActivity.showUserLicenseHtmlDialog方法时候,报错。是哪里问题呢?
java.lang.NoSuchMethodError: No interface method showUserLicenseHtmlDialog(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/view/View$OnClickListener;)V in class Lcom/xiaomi/smarthome/device/api/IXmPluginHostActivity; or its super classes (declaration of 'com.xiaomi.smarthome.device.api.IXmPluginHostActivity' appears in base.apk) at com.miaomiaoce.sensor_ht.module.home.MainActivity$20.onSuccess(Unknown Source:136) at com.miaomiaoce.sensor_ht.mo

蓝牙连接超时

有些设备在进行蓝牙连接时候回调中会报-7?如何避免这种超时状态呢?

空指针异常com.miot.common.people.People.getUserId

有时候会sdk内部会偶发com.miot.common.people.People.getUserId的空指针异常
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.miot.common.people.Account.getUserId()' on a null object reference
at com.miot.common.people.People.getUserId(SourceFile)
at com.miot.service.manager.discovery.impl.DeviceFactory.createFrom(SourceFile)
at com.miot.service.common.manager.ServiceManager$AccountManager$1.run(SourceFile)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
image
image
80e2cc93-f6de-436c-8a6e-4eb43f8c0267

发现不了设备

目前我用这个sdk带的demo后发现不了设备,(我找了一个空气净化器V2,米家app可以发现的)这个需要怎么搞?

固件更新比较慢

你好,
在做固件更新中,我用此方法往设备写入数据。
XmBluetoothManager.getInstance().writeNoRsp(mDeviceMac, UUID.fromString(MMCGattAttributes.SENSOR_SERVICE_UUID_OAD),
UUID.fromString(MMCGattAttributes.SENSOR_SPOTA_SERV_PATCH_DATA),
chunk, new Response.BleWriteResponse() {
@OverRide
public void onResponse(int code, Void data) {

                }
            });

但是在广播包它public static final String ACTION_CHARACTER_CHANGED = "com.xiaomi.smarthome.bluetooth.character_changed";接收数据返回的状态中。时间需要100ms左右,我该如何提升更新的速度呢?

米家推送无效

按照demo 方式进行处理



<uses-permission

android:name="com.xiaomi.permission.AUTH_SERVICE" />

public static final String PUSH_MESSAGE = "com.xiaomi.push.message";
public static final String PUSH_COMMAND = "com.xiaomi.push.command";
public void registerPush() {
    IntentFilter filter = new IntentFilter();
    filter.addAction(PUSH_COMMAND);
    filter.addAction(PUSH_MESSAGE);
    registerReceiver(mReceiver, filter);
}

MJPushBroadcastReceiver mReceiver = new MJPushBroadcastReceiver() ;

WiFi 快联失败

mijiaClient-3-3-3.arr

1.设置 小米账号信息:

PeopleFactory.createOauthPeople(accessToken, "小米UserId", expiresIn, macKey, macAlgorithm);
显示快联成功页面,设备列表有该设备。
OpenMiotCloudImpl: post url: /device/bind onSucceed: {"code":0,"message":"ok","result":"ok"}

2.设置 小米账号信息:

PeopleFactory.createOauthPeople(accessToken, "空字符串", expiresIn, macKey, macAlgorithm);
显示快联成功页面,设备列表无该设备。
https://openapp.io.mi.com/openapp/device/bind
D/OkHttpManager: parseResponse body: {"code":-6,"message":"-1:not permit,bind failed","result":{"ret":-1}}
D/OpenMiotCloudImpl: post url: /device/bind onSucceed: {"code":-6,"message":"-1:not permit,bind failed","result":{"ret":-1}}

Property中dataType定义为float类型,解析崩溃(Double 类型无法转换成 Float)

版本:mijiaClient-3-3-2.aar,mijiaService-3-3-2.aar,mijiaBluetooth-3-3-2.aar,codegenerator-3-3-0.jar
错误日志:
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Float
at com.miot.common.property.AllowedValueRange.isValueValid(AllowedValueRange.java:80)
at com.miot.common.property.AllowedValue.isValid(AllowedValue.java:14)
at com.miot.common.property.PropertyDefinition.validate(PropertyDefinition.java:134)
at com.miot.common.property.Property.setValue(Property.java:66)
at com.miot.service.b.b.b.a(DecodeHelper.java:46)
at com.miot.service.b.b.a.c.a(GetCodec.java:33)
at com.miot.service.b.b.a(GetPropertyTask.java:50)
at com.miot.service.b.b.parseResult(GetPropertyTask.java:23)
at com.miot.service.common.d.e.run(MiotTask.java:70)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:760)

定位到com.miot.common.device.parser.json.JsonDeviceParser中parseProperty(),在DataType.toObjectValue(String value)方法中是使用Double类型解析的,但是在AllowedValueRange中isValueValid中直接将Double强转成Float。所以出错了。

账号接入问题

Hi TianHang,
我们想在车机娱乐系统上和米家的设备互动互通,想获取到米家设备的状态以发送命令给设备,据了解应该是通过这个mijiaSDK接入,测试阶段没有服务器,已申请企业组,在小米开放平台创建了应用(智能家庭服务权限申请被拒了,原因是该能力仅面向智能硬件已接入小米IOT平台的企业开放重新申请审核中),把demo的包名改成了创建应用的包名,同时替换了APPID和APPKEY,这样的话点击demo中的MIACCOUNTLOGIN button会遇到NumberFormatException的问题,应该是格式转换中传递参数的问题,异常log如下:

05-16 14:36:23.246 14116 14116 E AndroidRuntime: FATAL EXCEPTION: main
05-16 14:36:23.246 14116 14116 E AndroidRuntime: Process: com.aptiv.aptivdemo, PID: 14116
05-16 14:36:23.246 14116 14116 E AndroidRuntime: java.lang.NumberFormatException: null
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at java.lang.Long.parseLong(Long.java:557)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at java.lang.Long.valueOf(Long.java:808)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at com.mi.account.XiaomiAccountGetPeopleInfoTask.(XiaomiAccountGetPeopleInfoTask.java:38)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at com.mi.activity.main.AccountActivity.processAuthResult(AccountActivity.java:183)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at com.mi.activity.main.AccountActivity.access$200(AccountActivity.java:32)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at com.mi.activity.main.AccountActivity$3.onPostExecute(AccountActivity.java:155)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at android.os.AsyncTask.finish(AsyncTask.java:755)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at android.os.AsyncTask.access$900(AsyncTask.java:192)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at android.os.Looper.loop(Looper.java:214)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7116)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
05-16 14:36:23.246 14116 14116 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)

我账号下家里有一台 米家智能摄像机云台版,其实目的就是想和米家的设备互通,获取设备状态以及发送命令给设备,因为没有服务器,所以通过授权码授权模式是不是不可用?那账号接入中的回调地址也没发修改填写了。

1.这种情况只能用隐式授权模式吗?
2.获取设备列表是否和申请应用的家庭服务权限有关,还是只和登陆的账户有关?
3.能否获取米家官方的设备(电视,门锁,空调,扫地机器人等),还是只能控制企业自己的硬件?

呈请解惑,多谢!

mi.log

蓝牙安全连接

你好,
用XmbluetoothManager.getInstance().secureConnect(mDeviceMac,connectResp);进行安全的蓝牙连接时候,回调中,连接不成功用时需要61s。如何才能提高连接不成功时候的回调速度呢?

首页,红点显示

你好,我在通过此方法,获取红点的状态。当固件是最新的版本时候,updateInfo.mHasNewFirmware值也是true。红点有显示?(或者说我该如何控制红点的显示状态,有更新时候显示,无更新时候不显示)
mDevice.checkDeviceUpdateInfo(new Callback() {

        @Override
        public void onSuccess(DeviceUpdateInfo updateInfo) {
            Log.e("tywei", updateInfo.mHasNewFirmware + "社么值");
            Message.obtain(mHandler, MSG_UPDATE_FIRM, updateInfo).sendToTarget();
        }

        @Override
        public void onFailure(int arg0, String arg1) {

        }
    });

固件版本号

/**

  • ApiLevel: 33
  • 必须与设备处于连接状态的时候才能读取
    */
    XmBluetoothManager.instance().getBluetoothFirmwareVersion(mac, new Response.BleReadFirmwareVersionResponse() {
    @OverRide
    public void onResponse(int code, String version) {
    // version类似1.0.3_2001
    }
    });

用以上接口获取硬件版本号,获取不正确???

固件更新

你好,我在做固件更新中。从菜单项进入到通用设置页面(检查固件更新菜单项)默认获取到有更新状态,红点显示。
2ba5298db169008c2b318228d5c859e
再进入到更新界面。我点击立即升级,
0466ad6c5b124bd264cf34cb275ad03
然后升级完成。到成功页面。
955928cb770329f3457ca1c078e4071
之后点击成功页面的确定按钮,此时当前成功页面销毁。然后返回通用设置页面。
2ba5298db169008c2b318228d5c859e
这个时候我需要更新通用设置页面的红点状态。

撤销使用条款和隐私政策

你好,我在菜单栏中打开了如下图撤销条款界面,点击撤销条款时候。如何把我的插件退出,并且回到米家设备页面。目前是回到了我插件的主页面。并没有把我主界面销毁。

获取设备列表 返回 app_id is null

logcat :
pkg:miot D/OpenMiotCloudImpl: post url: /openapp/user/device_list onSucceed: {"code":-8,"message":"app_id is null","result":""}
小米账号的 "使用您的智能家庭服务"权限已经通过。

选择wifi界面崩溃log

Process: com.chuangmi.imihome:miot, PID: 18750
java.lang.RuntimeException: Unable to destroy activity {com.chuangmi.imihome/com.miot.service.connection.wifi.SmartConfigMainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes(java.lang.String)' on a null object reference
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4505)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4523)
    at android.app.ActivityThread.-wrap5(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1683)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:176)
    at android.app.ActivityThread.main(ActivityThread.java:6701)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes(java.lang.String)' on a null object reference
    at com.miot.service.connection.DeviceConnectionImpl.getBase64(DeviceConnectionImpl.java:152)
    at com.miot.service.connection.DeviceConnectionImpl.access$000(DeviceConnectionImpl.java:29)
    at com.miot.service.connection.DeviceConnectionImpl$1.onSucceed(DeviceConnectionImpl.java:92)
    at com.miot.service.connection.wifi.SmartConfigMainActivity.onDestroy(SmartConfigMainActivity.java:190)
    at android.app.Activity.performDestroy(Activity.java:7252)
    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1249)
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4492)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4523) 
    at android.app.ActivityThread.-wrap5(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1683) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:176) 
    at android.app.ActivityThread.main(ActivityThread.java:6701) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 

定位权限

米家app第一次和固件绑定后,进入插件弹出位置权限。点击拒绝后,看到白屏闪烁一下,又弹出了位置权限,此时再点击拒绝。权限弹框消失。返回到米家界面,toast提示,授权失败?这属于正常现象吗?或者说我该如何处理点击拒绝的情况?
a516bcc050253099412f3e691178c9e

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.