2017-03-18 73 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.从短信接收器发送一个定制的广播意图。所以基本上,这将达到活动接收器,然后你可以简单地更新那里的文本。

如果你的活动尚未启动,只需创建一个活动意图,并通过短信为意图额外的一部分。