전화가 걸렸을 때 자동으로 SMS를 보내는 앱이 있지만 전화 발신 SMS가 시작되어 통화 거부 때까지 여러 번 계속되는 앱이있어서 잘못되었습니다. 각 호출마다 한 번만 보냅니다. 여기에 내 코드 나거부 전화 때까지 서비스가 계속 잘못 수신 됨
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