이 질문은 애매 모호해 보일 수도 있습니다. Intent
꽤 많이 배경에 삽니다. 동의하지만 Intent
필터를 사용하고 있습니다. 두 개의 버튼을 등록하고 등록을 취소합니다. . 누름 등록시 Intent
필터가 등록되면 등록 해제시에도 동일하게 동작합니다. 이제 등록 버튼을 누르고 앱을 백그라운드에 놓으면 토스트 메시지가 표시되지 않습니다. 그러나 사용자가 명시 적으로 등록 취소 버튼을 누를 때만 Intent
필터가 메시지 수신을 중지하도록합니다.인 텐트를 백그라운드에서 살리는 방법
나는이 코드를 사용하고 있습니다 : 활동이 실행되지 않을 때
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
// Show alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration);
toast.show();
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
};
public void register(View view){
this.registerReceiver(broadcastReceiver, new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED"));
}
public void unRegister(View view){
this.unregisterReceiver(broadcastReceiver);
}
}
공정하게 보입니다. 나는 그것을 확인해야합니다. 정크스 @MikeM. –
@ MikeM : 당신의 방식으로 구현 .. 아무 문제 없어 .. thanks –