电话和PhoneStateListener

问题描述 投票:1回答:2

我有一个小型的Telephony活动,我在我的智能手机上进行了测试,它有Android Nougat 7.0。

我在logcat中执行任何操作时的问题都没有改变“应用程序没有运行”,我在Manifest中有必要的权限。

你能帮我理解问题是什么,我该如何解决?

<uses-feature android:name="android.hardware.telephony"
    android:required="true" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

以下是我使用的代码:

public  class MainActivity extends AppCompatActivity{

    protected String TAG="Telephony";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        PhoneStateListener stateListener= new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state){
                    case TelephonyManager.CALL_STATE_IDLE :
                        Log.d(TAG, "Pas d'appel: ");
                        break;
                    case  TelephonyManager.CALL_STATE_OFFHOOK:
                        Log.d(TAG, "Il y a une communication téléphonique en cours");
                        break;
                        case  TelephonyManager.CALL_STATE_RINGING:
                            Log.d(TAG, "Le téléphone sonne, l'appelant est " + incomingNumber);
                            break;
                            default:
                                Log.d(TAG, "Etat inconnu");
                }
                super.onCallStateChanged(state, incomingNumber);
            }
        };

        TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        assert manager != null;
        manager.listen(new PhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);

    }
}
android
2个回答
0
投票

您需要创建一个扩展BroadcastReceiver的类,并在Activity或您的Manifest文件中将该类注册为BroadcastReceiver。

public class ServiceReceiver extends BroadcastReceiver{

protected String TAG="Telephony";

public ServiceReceiver() {
}

PhoneStateListener stateListener= new PhoneStateListener(){

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
    super.onCallStateChanged(state, incomingNumber);

    Log.d("STATE", "" + state);
    Log.d("INCOMING_NUMBER", incomingNumber);

        switch (state){
            case TelephonyManager.CALL_STATE_IDLE :
                Log.d(TAG, "Pas d'appel: ");
                break;
            case  TelephonyManager.CALL_STATE_OFFHOOK:
                Log.d(TAG, "Il y a une communication téléphonique en cours");
                break;
                case  TelephonyManager.CALL_STATE_RINGING:
                    Log.d(TAG, "Le téléphone sonne, l'appelant est " + incomingNumber);
                    break;
                    default:
                        Log.d(TAG, "Etat inconnu");
        }
    }
};

public PhoneStateListener getPhoneStateListener() {
    return phoneStateListener;
}

}

将此代码放在MainActivity中。

public  class MainActivity extends AppCompatActivity{

private IntentFilter intentFilter;
private ServiceReceiver myCallReceiver;
private TelephonyManager manager;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

myCallReceiver = new ServiceReceiver();
manager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.PHONE_STATE");

getApplicationContext.registerReceiver(myCallReceiver, intentFilter);

manager.listen(myCallReceiver.getPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);

}

0
投票

您的电话管理器不会侦听您创建的PhoneStateListener。更改您的代码如下:

由此:

manager.listen(new PhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);

对此:

manager.listen(stateListener,PhoneStateListener.LISTEN_CALL_STATE);
© www.soinside.com 2019 - 2024. All rights reserved.