2013-10-28 3 views
1

Я пишу небольшое приложение, которое, когда телефон получает SMS-сообщения. Он покажет номер телефона отправителя и тело SMS в TextView. У меня есть SMS BoardcastReceiver и Activity.Показать SMS-сообщение в TextView

Вот мой прослушиватель SMS.

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.telephony.SmsMessage; 
import android.util.Log; 
import android.widget.Toast; 

public class IncomingSms extends BroadcastReceiver { 

    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 
    BroadcastNewSms ourSMS; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     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("SmsReciver", "senderNum: " + senderNum 
          + ", message: " + message); 
        //ourSMS.getSmsDetails(senderNum, message); 
        // Show SMS notification 
        int duration = Toast.LENGTH_LONG; 
        Toast toast = Toast.makeText(context, "senderNum: " 
          + senderNum + ", message: " + message, duration); 
        toast.show(); 

       } // end of for loop 
      } // bundle 

     } catch (Exception e) { 
      // TODO: handle exception 
      Log.e("SmsReciver", "Exception smsReciver" + e); 
     } 
    } 
} 

Вот моя активность:

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class BroadcastNewSms extends Activity { 

    TextView SMSm; 
    String phoneNumber1; 
    String SMSBody1; 

    public void getSmsDetails(String phoneNumber, String SMSBody) { 
     phoneNumber1 = phoneNumber; 
     SMSBody1 = SMSBody; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     SMSm = (TextView) findViewById(R.id.etSmsBody); 

     SMSm.setText("Phone Number: " + phoneNumber1 + " " + "SMS: " + 
     SMSBody1); 

    } 

} 

Вот мой Manifest:

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="kobi.avshalom.recivesms.BroadcastNewSms" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name="kobi.avshalom.recivesms.IncomingSms" > 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 

    <uses-permission android:name="android.permission.RECEIVE_SMS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.READ_SMS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.SEND_SMS" > 
    </uses-permission> 
+2

Но Что ваша проблема/ошибка? –

+0

@ Принц, пожалуйста, отлаживайте. Нет вопросов –

+0

@SherifelKhatib что? OP не указывает проблему, поэтому я спрашиваю об этом. –

ответ

2

В деятельности BroadcastNewSms объявить getSmsDetails статичным:
public static void getSmsDetails(String phoneNumber, String SMSBody)

В IncomingSms заменить //ourSMS.getSmsDetails(senderNum, message);
с BroadcastNewSms.getSmsDetails(senderNum, message);

Я также предлагаю вам изменить getSmsDetails к setSmsDetails

+0

Спасибо Работа: D –

+0

Добро пожаловать в SO. Следуйте этому [link] (http://stackoverflow.com/help/someone-answers), чтобы узнать, как сказать «спасибо» в stackoverflow. – ramaral

0

Вы пробовали использовать PopupWindow? Вы можете показать всплывающее окно, как это:

private PopupWindow popupWindow; 

....

LayoutInflater layoutInflater = (LayoutInflater) getBaseContext() 
       .getSystemService(LAYOUT_INFLATER_SERVICE); 
     View popupView = layoutInflater.inflate(R.layout.custom_popup_layout, 
       (ViewGroup) findViewById(R.id.popup_root_element), true); 
popupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, 
        LayoutParams.WRAP_CONTENT); 
      // Display the popup window 
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0); 

Чтобы отклонить всплывающее окно, которое вы должны вызвать

// Close the popup window 
popupWindow.dismiss(); 

Вы можете поместить это в таймере (если вы хотите автоматическое отключение), или вы можете прикрепить событие к кнопке в макете всплывающего окна.

Чтобы получить доступ к элементам внутри макета всплывающего окна в вы можете использовать:

popupWindow.getContentView().findViewById(R.id.the_id_of_the_widget); 

Надежда это то, что вы искали.

+0

Привет, спасибо, но мне нужно поместить сообщение в TextView, No popup .. –

+0

В макете PopupWidnow внутри виджета есть только виджет TextView. –

Смежные вопросы