안드로이드 개발 질문/답변
(글 수 45,052)
간단한 SMS 암호화 해서 전송하는 프로그램인데요.... 어플 처음 설치하고나서 제일 처음 메세지를 전송하면 암호화 했던 메세지가 복호화 되서 화면에 날 나타나는데.... 2번째 메세지를 받을때 부터 문제가 발생하더라구요. 브로드 캐스트 리시버에서 잘못 받아왓나 확인해 봤는데 메세지는 확실히 잘 받아왔는데 이상하게도 제일 처음에 읽어 들였던 메세지를 잘못 받아오는거에요?? 이유를 모르겠습니다....
아무래도 메세지 수신 엑티비티에서 인턴드를 통해서 데이터를 잘 못받아와서 그런것 같은데 책을 뒤졌도 방법이 없어서요 답변 부탁드립니다.
public class SMSReceiver extends BroadcastReceiver { //브로드캐스트 클래스
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if(extras != null){
Object[] pdus = (Object[])extras.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0; i<pdus.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
for(SmsMessage message : messages){
String msg = message.getMessageBody();
String from = message.getOriginatingAddress();
Toast.makeText(context, from + " : " + msg, Toast.LENGTH_LONG).show();
Notification notification = new Notification(android.R.drawable.ic_input_add,
"메세지 수신",System.currentTimeMillis());
NotificationManager nm = (NotificationManager)context.
getSystemService(context.NOTIFICATION_SERVICE);
Intent in = new Intent(context, ReceiveSMS.class);
//Log.v("number : ",from);
//Log.v("message : ",msg);
in.putExtra("sender_number",from);
in.putExtra("message", msg);
Log.v("=========브로드캐스트리시버======== : ","=========================");
Log.v("number : ",in.getStringExtra("sender_number"));
Log.v("message : ",in.getStringExtra("message"));
//context.startActivity(in);
PendingIntent inten =
PendingIntent.getActivity(context, 0, in, 0);
notification.setLatestEventInfo(context, from, msg, inten);
nm.notify(1234,notification);
}
}
}
}
public class ReceiveSMS extends Activity { //메세지 수신 액티비티
private String sender_number;
private String message;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("===========ReceiveSMS==============","=====onCreate()========");
setContentView(R.layout.receivesms);
EditText sender = (EditText)findViewById(R.id.sender_number);
EditText msg = (EditText)findViewById(R.id.receve_message);
EditText key = (EditText)findViewById(R.id.receve_key_editbox);
Button btn = (Button)findViewById(R.id.decoder_button);
Button exit_btn = (Button)findViewById(R.id.receve_exit);
// TODO Auto-generated method stub
Intent data = getIntent();
sender_number = data.getStringExtra("sender_number");
message = data.getStringExtra("message");
Log.v("sender_number",data.getStringExtra("sender_number"));
Log.v("message",data.getStringExtra("message"));
//복호화영역 - 시작
char[] arr = message.toCharArray();
for(int i = 0 ; i < arr.length ; i++)
arr[i] -=1;
message = String.valueOf(arr);
sender.setText(sender_number);
msg.setText(message);
///복호화영역 - 끝
NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
nm.cancel(1234);
exit_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}
protected void onPause(){
super.onPause();
Log.v("===========ReceiveSMS==============","=====onPause()========");
}
protected void onStop(){
super.onStop();
Log.v("===========ReceiveSMS=====================","=====onStop()========");
}
protected void onRestart(){
super.onRestart();
Log.v("===========ReceiveSMS=====================","=====onRestart()========");
}
protected void onResume(){
super.onResume();
Log.v("===========ReceiveSMS=====================","=====onRresume()========");
}
protected void onStart(){
super.onStart();
Log.v("===========ReceiveSMS=====================","=====onStart()========");
}
}
왜그런지 답변좀 부탁드립니다...
혹시나 보기 힘드시면 파일통째로 보내드리겠습니다..
아무래도 메세지 수신 엑티비티에서 인턴드를 통해서 데이터를 잘 못받아와서 그런것 같은데 책을 뒤졌도 방법이 없어서요 답변 부탁드립니다.
public class SMSReceiver extends BroadcastReceiver { //브로드캐스트 클래스
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if(extras != null){
Object[] pdus = (Object[])extras.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0; i<pdus.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
for(SmsMessage message : messages){
String msg = message.getMessageBody();
String from = message.getOriginatingAddress();
Toast.makeText(context, from + " : " + msg, Toast.LENGTH_LONG).show();
Notification notification = new Notification(android.R.drawable.ic_input_add,
"메세지 수신",System.currentTimeMillis());
NotificationManager nm = (NotificationManager)context.
getSystemService(context.NOTIFICATION_SERVICE);
Intent in = new Intent(context, ReceiveSMS.class);
//Log.v("number : ",from);
//Log.v("message : ",msg);
in.putExtra("sender_number",from);
in.putExtra("message", msg);
Log.v("=========브로드캐스트리시버======== : ","=========================");
Log.v("number : ",in.getStringExtra("sender_number"));
Log.v("message : ",in.getStringExtra("message"));
//context.startActivity(in);
PendingIntent inten =
PendingIntent.getActivity(context, 0, in, 0);
notification.setLatestEventInfo(context, from, msg, inten);
nm.notify(1234,notification);
}
}
}
}
public class ReceiveSMS extends Activity { //메세지 수신 액티비티
private String sender_number;
private String message;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("===========ReceiveSMS==============","=====onCreate()========");
setContentView(R.layout.receivesms);
EditText sender = (EditText)findViewById(R.id.sender_number);
EditText msg = (EditText)findViewById(R.id.receve_message);
EditText key = (EditText)findViewById(R.id.receve_key_editbox);
Button btn = (Button)findViewById(R.id.decoder_button);
Button exit_btn = (Button)findViewById(R.id.receve_exit);
// TODO Auto-generated method stub
Intent data = getIntent();
sender_number = data.getStringExtra("sender_number");
message = data.getStringExtra("message");
Log.v("sender_number",data.getStringExtra("sender_number"));
Log.v("message",data.getStringExtra("message"));
//복호화영역 - 시작
char[] arr = message.toCharArray();
for(int i = 0 ; i < arr.length ; i++)
arr[i] -=1;
message = String.valueOf(arr);
sender.setText(sender_number);
msg.setText(message);
///복호화영역 - 끝
NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
nm.cancel(1234);
exit_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}
protected void onPause(){
super.onPause();
Log.v("===========ReceiveSMS==============","=====onPause()========");
}
protected void onStop(){
super.onStop();
Log.v("===========ReceiveSMS=====================","=====onStop()========");
}
protected void onRestart(){
super.onRestart();
Log.v("===========ReceiveSMS=====================","=====onRestart()========");
}
protected void onResume(){
super.onResume();
Log.v("===========ReceiveSMS=====================","=====onRresume()========");
}
protected void onStart(){
super.onStart();
Log.v("===========ReceiveSMS=====================","=====onStart()========");
}
}
왜그런지 답변좀 부탁드립니다...
혹시나 보기 힘드시면 파일통째로 보내드리겠습니다..