我正在测试Samsung GT-S7562上的PhonestateListener(双sim-4.0),然后STATE总是返回0并且INCOMING NUMBER总是返回空.虽然它在我的另一台设备SAMSUNG GT-S5570(单一sim-2.2)上工作正常.这是我的代码.
import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.Intent;import androID.telephony.PhonestateListener;import androID.telephony.TelephonyManager;import androID.util.Log;import androID.Widget.Toast;public class IncomingCall extends broadcastReceiver { Context pcontext; public voID onReceive(Context context, Intent intent) { pcontext = context; try { TelephonyManager tmgr = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); MyPhonestateListener PhoneListener = new MyPhonestateListener(); tmgr.Listen(PhoneListener, PhonestateListener.ListEN_CALL_STATE); } catch (Exception e) { Log.e("Phone Receive Error", " " + e); } } private class MyPhonestateListener extends PhonestateListener { public voID onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: Toast.makeText( pcontext, "CALL_STATE_IDLE.\nIncomming Number : " + incomingNumber, Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: Toast.makeText( pcontext, "CALL_STATE_OFFHOOK.\nIncomming Number : " + incomingNumber, Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_RINGING: Toast.makeText( pcontext, "CALL_STATE_RINGING.\nIncomming Number : " + incomingNumber, Toast.LENGTH_SHORT).show(); break; default: { Toast.makeText(pcontext, "Default.\nIncomming Number : " + incomingNumber, Toast.LENGTH_SHORT).show(); } } } }}
还在menifest文件中添加了Persmission.
<uses-permission androID:name="androID.permission.READ_PHONE_STATE" /><receiver androID:name="com.example.caller.ServiceReceiver" > <intent-filter> <action androID:name="androID.intent.action.PHONE_STATE" /> </intent-filter> </receiver>
解决方法:
PhonestateListener无法在很多设备上运行,特别是在HUAWEI和ZTE上.
你可以试试这个:
public class PhonestateReceiver extends broadcastReceiver {private static final String TAG = PhonestateReceiver.class.getSimplename();private static String incoming_number = null;@OverrIDepublic voID onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); // outgoing call Log.i(TAG, "call OUT:" + phoneNumber); } else { TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE); switch (tm.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: // incoming call incomingFlag = true; incoming_number = intent.getStringExtra("incoming_number"); LogUtils.d(TAG, "RINGING :" + incoming_number); break; case TelephonyManager.CALL_STATE_OFFHOOK: if (incomingFlag) { LogUtils.d(TAG, "incoming ACCEPT :" + incoming_number); } break; case TelephonyManager.CALL_STATE_IDLE: if (incomingFlag) { // hang up LogUtils.d(TAG, "incoming IDLE, number:" + incoming_number); } break; } }}
表现:
<receiver androID:name=".receiver.PhonestateReceiver" androID:exported="false" > <intent-filter> <action androID:name="androID.intent.action.PHONE_STATE" /> </intent-filter> </receiver>
但我不确定这个广播是否一直有效.我同时使用这两种方式.它工作正常.祝好运.
总结以上是内存溢出为你收集整理的android – PhoneStateListener无法使用Samsung GT-S7562全部内容,希望文章能够帮你解决android – PhoneStateListener无法使用Samsung GT-S7562所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)