我有一个小型的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);
}
}
您需要创建一个扩展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);
}
您的电话管理器不会侦听您创建的PhoneStateListener。更改您的代码如下:
由此:
manager.listen(new PhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);
对此:
manager.listen(stateListener,PhoneStateListener.LISTEN_CALL_STATE);