我有一個應用程序,當發生呼叫時自動發送短信,但是當一個通話發送短信開始並繼續多次直到呼叫拒絕,這是錯誤的,我想每次打電話只發一次。這裏是我的代碼,請幫我在廣播接收器發送短信,而服務繼續錯誤地繼續拒絕通話
SmsService.java
public class SmsService extends Service {
public static
BroadcastReceiver mReceiver;
public static class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
// System.out.println("incomingNumber : "+incomingNumber);
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
Log.d("callingggggggg","oopsssss");
sendSMS(incomingNumber,"hello",context);
}
},PhoneStateListener.LISTEN_CALL_STATE);
}
},PhoneStateListener.LISTEN_CALL_STATE);
}
}
SendSMS.java
private void sendSMS(String phoneNumber, String message, Context c) {
try {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber,null,message,null,null);
Toast.makeText(c, "SMS sent.",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(c, "SMS sending failed...",Toast.LENGTH_SHORT).show();
}
}
}
注:我第一次做註冊和註銷我在的onCreate和接收器的onDestroy在我服務類,但之後,將其更改爲onResume和onPause在我的主要活動中,沒有一個沒有不同。
的onResume和中的onPause主要活動
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("action");
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
mReceiver = new SmsService.ServiceReceiver();
registerReceiver(mReceiver, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
的Manifest.xml
<service
android:enabled="true"
android:name=".SmsService"
android:label="SmsService" >
</service>
<receiver android:name="com.example.mohammad.testsms.SmsService$ServiceReceiver" >
<intent-filter >
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
https://developer.android.com/reference/android/telephony/TelephonyManager.html你可以從這個網站獲得狀態信息。 –
我這樣做,但沒有區別 – hdiz