2017-03-18 85 views
1

我需要設置從IncomingSms(非活性類)Main3Activity(Activity類)的TextView對象。如何從其他非活動類的Android插入的TextView的活動?

public class IncomingSms extends BroadcastReceiver { 

    final SmsManager sms = SmsManager.getDefault(); 

    @Override 
    public void onReceive(Context context, Intent 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 senderNum = currentMessage.getDisplayOriginatingAddress(); 
        String message = currentMessage.getDisplayMessageBody(); 
        if (message.equalsIgnoreCase("FIRE DETECTED")) { 
         //Problem start here: I cant able to set TextView object of Main3Activity 
         Main3Activity main3Activity = new Main3Activity(); 
         TextView tv = (TextView) main3Activity.findViewById(R.id.firealert); 
         tv.setText(message); 
         //Problem end here 
         Log.i("SmsReceived", "senderNum: " + senderNum + "; message: " + message); 
         int duration = Toast.LENGTH_LONG; 
         Toast toast = Toast.makeText(context, message, duration); 
         toast.show(); 
        } 
       } 
      } 
     } catch(Exception e) { 
      Log.e("SmsReceiver", "Exception smsReceiver" + e); 
     } 
    } 
} 
+1

使內brodcast接收器,那麼你可以設置文本很容易 –

+0

你有答案嗎? –

回答

1

保存它創建一個接口類,如Java類,然後

public interface SmsListener { 
      public void messageReceived(String messageText); 
    } 

final SmsManager sms = SmsManager.getDefault(); 
private static SmsListener mListener; 
@Override 
public void onReceive(Context context, Intent 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 senderNum = currentMessage.getDisplayOriginatingAddress(); 
       String message = currentMessage.getDisplayMessageBody(); 
       if (message.equalsIgnoreCase("FIRE DETECTED")){ 
        mListener.messageReceived(message); //add this 
        Log.i("SmsReceived", "senderNum: "+ senderNum + "; message: " + message); 
        int duration = Toast.LENGTH_LONG; 
        Toast toast = Toast.makeText(context, message, duration); 
        toast.show(); 
       } 
      } 
     } 
    } catch (Exception e) { 
     Log.e("SmsReceiver", "Exception smsReceiver" +e); 
    } 
} 
public static void bindListener(SmsListener listener) { 
     mListener = listener; 
    } 

而在你Main3Activity onCreate方法

TextView tv=(TextView) main3Activity.findViewById(R.id.firealert); 


SmsReceiver.bindListener(new SmsListener() { 
       @Override 
       public void messageReceived(String messageText) { 
        Log.d("Text",messageText); 
        tv.setText(messageText); 
       } 
      }); 
+0

非常感謝,它使Kiran! –

+0

@SowmithraKumara很高興聽到這個消息,但請將其標記爲答案 –

+0

我是新來的stackoverflow,我投票贊成,但它顯示贏得15聲望後,投票將被應用! –

1

您不能像這樣創建活動實例。

解決方法:1. 您的活動創建一個廣播接收器和註冊自定義的意圖。 2.從短信接收器發送一個定製的廣播意圖。所以基本上,這將達到活動接收器,然後你可以簡單地更新那裏的文本。

如果你的活動尚未啓動,只需創建一個活動意圖,並通過短信爲意圖額外的一部分。