我参加Telephony的活动很少,并且在装有Android Nougat 7.0的智能手机上进行了测试。
当我在logcat中执行时什么都没改变,“应用程序无法运行”,并且我在清单中拥有必要的权限。
您能帮助我了解问题所在以及如何解决吗?
<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);
}
}
答案 0 :(得分:0)
您需要创建一个扩展BroadcastReceiver的类,并在您的Activity或清单文件中将该类注册为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);
}
答案 1 :(得分:0)
您的电话管理器不会监听您创建的PhoneStateListener。如下更改代码:
从此:
manager.listen(new PhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);
对此:
manager.listen(stateListener,PhoneStateListener.LISTEN_CALL_STATE);