android–PhoneStateListener无法使用Samsung GT-S7562

android–PhoneStateListener无法使用Samsung GT-S7562,第1张

概述我正在测试SamsungGT-S7562上的PhoneStateListener(双sim-4.0),然后STATE总是返回0并且INCOMINGNUMBER总是返回空.虽然它在我的另一台设备SAMSUNGGT-S5570(单一sim-2.2)上工作正常.这是我的代码.importandroid.content.BroadcastReceiver;importandroid.content.Context;i

我正在测试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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1096132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存