2017-03-18 6 views
1

(アクティビティクラス以外)のTextViewオブジェクトをMain3Activity(アクティビティクラス)に設定する必要があります。他の非アクティビティクラス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

ありがとう、それはキランを働いた! –

+0

@SowmithraKumaraはそれを聞いてうれしいですが、答えとして –

+0

をマークしてください私はstackoverflowに新しいです、私は投票しましたが、評判15を獲得した後、投票が適用されます! –

1

このようなアクティビティインスタンスを作成することはできません。

解決策: 1.アクティビティにブロードキャストレシーバを作成し、カスタムインテントを登録します。 2. SMS受信者からカスタムブロードキャストインテントを送信します。基本的にはアクティビティレシーバーに到達し、そこでテキストを単純に更新することができます。

アクティビティが開始されていない場合は、単にアクティビティインテントを作成し、そのインテントエクストラの一部としてSMSテキストを渡します。

関連する問題