我有以下代码在我的应用程序中接收电话状态:
private PhoneStateListener phoneListener = new PhoneStateListener(){
public void onCallStateChanged(int state,String incomingNumber){
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG, "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG, "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.i(TAG, "RINGING");
break;
}
}
};
所有在两个模拟器(Android 6.0和Android 4.4)上运行正常。但是在我的真实设备上(android 4.4,Oukitel Original One)我在响铃时得到了以下输出:
RINGING
IDLE //in real I'm still ringing here.
IDLE //real stop ringing
是否有任何狡猾的功能或它只是固件中的错误?不幸的是,我的搜索没有任何结果。
UPD 它适用于某些设备,对于其他设备,它的工作原理如上所述。
更多细节。我在我的服务的onStartCommand中设置了这个监听器。如果收到TelephonyManager.EXTRA_STATE_RINGING,则服务从广播接收器开始。
UPD2 好吧,我找到了解决方案。广播接收器工作正常,所以我刚刚切换到接收器通知。但它真的很有趣,PhoneStateListener出了什么问题。如果有人有任何想法,请告诉我。
答案 0 :(得分:0)
请使用此代码一定能帮到您 请检查不是在emmulator中的真实设备
http://www.compiletimeerror.com/2013/08/android-call-state-listener-example.html#.V7CLBvl97IU
答案 1 :(得分:0)
我能够通过让服务在调用以保持服务活动时发出startForeground通知来解决这个问题。您的问题可能在其他地方,但可能值得尝试一下。
在我的服务onCreate:
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_icon1)
.setContentTitle("title")
.setContentText("description")
.setContentIntent(pendingIntent).build();
startForeground(1337, notification);