unissoft-bj / ihostsvc

system services & data services on ihost
0 stars 0 forks source link

Android aars 录音服务APP ~ 问题 #36

Open iandygit opened 9 years ago

iandygit commented 9 years ago

今天除了在USB调试模式测试之外,还build了APK包,并且安装到手机上。 手机型号:华为/荣耀6plus/EMUI3.0/Android4.4.2 我发现使用APK还是与USB调试有很大不同,之前在USB调试模式下,程序可以一直运行,实际是受到了系统的保护,因此在USB调试模式不间断,不停止;但在APK下会随机的被停止,不管是否使用了Service方式。 为此,我在系统设置中找到“受保护的后台应用”一项,把我们的服务选中,之后可以持续几个小时不会中断。

尽管调整了很多的代码方式,但只要不勾选上面的设置,就不能保证程序的持续运行。

我已经采用了以下的方法: 1.service onStartCommand 方法 return START_STICKY ---->(没用) 2.onDestory 中 startService(自己) ---->(没用,因为清除内存时不会调用此方法)

  1. android:persistent="true" ---->没用
  2. android:process=":remote" ---->没用
  3. android:sharedUserId="com.android.settings" (共享系统的进程) ---->(没用)
  4. 监听screen_on广播,还是没用
michaelyin commented 9 years ago

need see the logcat for logs describing what happened to the app.

unissoft-bj commented 9 years ago

界面刷新问题:

在没有wifi的情况下,点击“启动录音服务”:两个长振表示退出;此事界面上“启动录音服务”还是灰色,停止录音服务为黑色

非正常停止情况下,界面按钮没有复位

另外按钮名字,要改成“接待开始”“接待结束”

unissoft-bj commented 9 years ago

退出长振问题

昨天夜里手机自己开始振动,时间是不到24点,忘记了是怎么处理的了 今天早上从家里出来,wifi断开后,有两次长振;长振之前并没有1分钟的振动提醒 感觉有点乱。

iandygit commented 9 years ago

今天早上从家里出来,wifi断开后,有两次长振;长振之前并没有1分钟的振动提醒 感觉有点乱。

WIFI断开后,有两次长震,表示网络断开,系统检测到网络链接的异常,从而结束了发数据包的操作,也是一次Reception的结束;后面没有1分钟的提醒,是完全正常的。

iandygit commented 9 years ago

新提供的蓝牙按键,有一个是坏的,按了之后会连击。 响应蓝牙按键,需要让之前的程序响应音量键。 但是,在原来的工程中,无论如何不能响应onKeyDown事件,查了N多资料无济于事,不知道尹总是否使用了Fragment。 后来,重新建立了一个新的App Project,可以正常响应onKeyDown事件,接下来,计划把原来的代码暂时迁移到新的App上。

michaelyin commented 9 years ago

没有使用Fragment.

你可以试试。看看logcat是否有错误信息。

iandygit commented 9 years ago

我已经在新的App Project上成功应用onKeyDown事件,但是,新的问题来了: 仅在Activity中响应onKeyDown事件还是不够用,当Activity退出时则不再响应,不符合我们的需求; 我们的结构应该是: Activity负责首次启动监听服务、或手动停止监听服务和进行系统设置,如IP; 监听的服务在Service中执行; 通过BroadcastReceiver监听系统传过来的广播,响应系统的按键,启动或停止服务; 但是,可能由于权限安全的考虑,在Android中没有暴漏相应的函数,想实现该第3个功能,需要使用底层的一些技术,以下是相关的一个帖子,尹总参考一下,看有什么办法,我这里遇到了困难了。 http://www.itnose.net/detail/6138073.html

michaelyin commented 9 years ago

Activity退出时? Activity不可见 还是 Activity被杀掉。

搜了下,似乎没有好的解决办法

http://stackoverflow.com/questions/19345705/key-listener-in-service

http://stackoverflow.com/questions/10154118/listen-to-volume-buttons-in-background-service/11462962#11462962

iandygit commented 9 years ago

Activity不在前台时,或者说不可见时,就监听不到音量键了; 不过为什么系统的音乐程序可以监听呢?

iandygit commented 9 years ago

监控系统按键有如下方式:

  1. 用onKeyDown事件,或是dispatchEvent,这两种方式都必须在Activity中,不能使用Fragment,且Activity必须在前端时,Activity失去焦点,即使是隐藏在后台,没有被销毁,仍然无法监听到按键了。
  2. 我们的需求是,必须使用Service在后台运行,监听系统按键。而service是不支持onKeyDown的,因此必须通过broadcastReceiver,监听系统的广播来实现。思路上讲,一般采用BroadcastReceiver,监听Media_Button事件,但是我一直没能监听成功,后来发现原因是我再mainfest文件中静态注册的方式不能生效,需要使用Activity,在onCreate或onResume事件中动态注册,还需要最后的测试。
  3. 后来我采用监听Audio_stream的方式,在Activity中,动态注册事件,可以监听到。可以变相实现,但是,由于是在Activity中注册的,会随着Activity的Destory而停止监听;因此还没有合适的解决方案。
  4. 而我在Activity中,动态注册的TIME_TICK事件的监听,可以很稳定的在每一个整分时间点接受到系统的广播,这里可以加入对service是否处于正常活动进行监测,并适时干预。

今天,我又看到一篇博客,写的是这样的需求,跟我之前采用的注册方式不同,似乎可以实现。不过其所用到的方法:mAudioManager.registerMediaButtonEventReceiver(mComponentName);,在我的环境中提示,不推荐使用。而且,最终也没能生效。 这个问题,我请我Android开发的朋友帮忙在看,这1两天会有结果。 链接如下:尹总有时间也可以帮我看下。 http://www.itnose.net/detail/6238655.html

另外,我听蔡总说,尹总说需要写底层C代码,我经过查资料,也觉得只有这样的方式是最稳定的; 这代码是由您来写,还是我找那个Android开发来写呢?

iandygit commented 9 years ago

http://blog.csdn.net/chengzhaoan2010/article/details/7944266 http://blog.sina.com.cn/s/blog_4cd5d2bb0101exhk.html 以上是两个说明android事件监听机制的资料。

iandygit commented 9 years ago

2015.04.26 新版本功能:

  1. 开始录音时短震2次;结束录音时长震2次;系统每10分钟短震1次提醒。
  2. 接受VOLUME+,开始录音。如果已经开始,则短震一次表示提醒。
  3. 接受耳机VOLUME+,开始录音。
  4. 接受蓝牙设备按键,开始录音。但是,有时可能会被蓝牙设备同时产生的N个ENTER键信号干扰,进入设置界面。
  5. 系统启动后会将屏幕亮度降低到最低。
  6. 系统启动后会禁止用户手机进入锁屏状态。