添加PhoneStateListener

igo*_*gor 9 android phone-call phone-state-listener

我正在努力建立,PhoneStateListener但我得到了一个PhoneCallListener cannot be resolved to a type.

public class ButtonView extends FrameLayout  {

     PhoneCallListener phoneListener = new PhoneCallListener();
     TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
     telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
}
Run Code Online (Sandbox Code Playgroud)

在另一个例子中,我发现它写得像这样,它正在工作

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {

        // add PhoneStateListener
        PhoneCallListener phoneListener = new PhoneCallListener();
        TelephonyManager telephonyManager = (TelephonyManager) this
            .getSystemService(Context.TELEPHONY_SERVICE);
        telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
}
Run Code Online (Sandbox Code Playgroud)

我应该在代码中更改什么才能使其正常工作?

Tal*_*lha 20

你必须创建一个接收器来接听电话.

为此,请在manifest.xml中添加:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<receiver android:name=".ServiceReceiver">
    <intent-filter>
      <action android:name="android.intent.action.PHONE_STATE" />
   </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

并创建这些类:

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.webkit.WebView;

public class MyPhoneStateListener extends PhoneStateListener {

    public static Boolean phoneRinging = false;

    public void onCallStateChanged(int state, String incomingNumber) {

        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            Log.d("DEBUG", "IDLE");
            phoneRinging = false;
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            Log.d("DEBUG", "OFFHOOK");
            phoneRinging = false;
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            Log.d("DEBUG", "RINGING");
            phoneRinging = true;

            break;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class ServiceReceiver extends BroadcastReceiver {
    TelephonyManager telephony;

    public void onReceive(Context context, Intent intent) {
        MyPhoneStateListener phoneListener = new MyPhoneStateListener();
        telephony = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
    }

    public void onDestroy() {
        telephony.listen(null, PhoneStateListener.LISTEN_NONE);
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 您在Receiver中没有OnDestroy.http://developer.android.com/reference/android/content/BroadcastReceiver.html (7认同)
  • READ_PHONE_STATE权限 - 是一个危险的权限,必须对棉花糖以上运行时检查 (5认同)
  • 只是对 onDestroy() 的更正。你不应该传递 null:telephony.listen(phoneListener, PhoneStateListener.LISTEN_NONE); phoneListener 应该成为成员。 (2认同)