在android中的textview中显示并显示

问题描述:

我编写的程序用于在android中发送和接收短信,并在文本视图中显示收到的内容短信。我想在程序中收到短信,而不是在收件箱中发送消息! 我知道必须从textview.settext(“smsContentEtc”)使用,但我不能使用和实现它。 我把整个代码。 sms.java用于发送短信和SmsReceiver.java用于接收短信。 请帮助我。在android中的textview中显示并显示

sms.java

public class SMS extends Activity { 

     Button btnSendSMS; 
     EditText txtPhoneNo; 
     EditText txtMessage; 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main);   
      btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
      txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
      txtMessage = (EditText) findViewById(R.id.txtMessage);   
      btnSendSMS.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View v) 
       {     
        String phoneNo = txtPhoneNo.getText().toString(); 
        String message = txtMessage.getText().toString();     
        if (phoneNo.length()>0 && message.length()>0)     
         sendSMS(phoneNo, message);     
        else 
         Toast.makeText(getBaseContext(), 
          "Please enter both phone number and message.", 
          Toast.LENGTH_SHORT).show(); 
       } 
      });   
     } 
     private void sendSMS(String phoneNumber, String message) 
     {   
      String SENT = "SMS_SENT"; 
      String DELIVERED = "SMS_DELIVERED"; 

      PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(SENT), 0); 

      PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(DELIVERED), 0); 

      //---when the SMS has been sent--- 
      registerReceiver(new BroadcastReceiver(){ 
       @Override 
       public void onReceive(Context arg0, Intent arg1) { 
        switch (getResultCode()) 
        { 
         case Activity.RESULT_OK: 
          Toast.makeText(getBaseContext(), "SMS sent", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
          Toast.makeText(getBaseContext(), "Generic failure", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_NO_SERVICE: 
          Toast.makeText(getBaseContext(), "No service", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_NULL_PDU: 
          Toast.makeText(getBaseContext(), "Null PDU", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case SmsManager.RESULT_ERROR_RADIO_OFF: 
          Toast.makeText(getBaseContext(), "Radio off", 
            Toast.LENGTH_SHORT).show(); 
          break; 
        } 
       } 
      }, new IntentFilter(SENT)); 

      //---when the SMS has been delivered--- 
      registerReceiver(new BroadcastReceiver(){ 
       @Override 
       public void onReceive(Context arg0, Intent arg1) { 
        switch (getResultCode()) 
        { 
         case Activity.RESULT_OK: 
          Toast.makeText(getBaseContext(), "SMS delivered", 
            Toast.LENGTH_SHORT).show(); 
          break; 
         case Activity.RESULT_CANCELED: 
          Toast.makeText(getBaseContext(), "SMS not delivered", 
            Toast.LENGTH_SHORT).show(); 
          break;       
        } 
       } 
      }, new IntentFilter(DELIVERED));    
      SmsManager sms = SmsManager.getDefault(); 
      sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
     } 
} 

SmsReceiver的.java

public class SmsReceiver extends BroadcastReceiver 
    { 
     private TextView txtshow; 
     @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       //---get the SMS message passed in--- 
       Bundle bundle = intent.getExtras();   
       SmsMessage[] msgs = null; 
       String str = "";    
       if (bundle != null) 
       { 
        //---retrieve the SMS message received--- 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 

        for (int i=0; i<msgs.length; i++){ 
         msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);       
         str += "SMS from " + msgs[i].getOriginatingAddress();      
         str += " :"; 
         str += msgs[i].getMessageBody().toString(); 
         str += "\n"; 

        } 
        //---display the new SMS message--- 
        //Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
        txtshow.setText("smsContentEtc");     
       }       
      } 
     } 

main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Enter the phone number of recipient" 
     />  

    <EditText 
     android:id="@+id/txtPhoneNo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"   
     android:text="Message" 
     />  

    <EditText 
     android:id="@+id/txtMessage" 
     android:layout_width="fill_parent" 
     android:layout_height="150px" 
     android:gravity="top" /> 

    <Button 
     android:id="@+id/btnSendSMS" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Send SMS" 
     /> 

    <TextView 
     android:id="@+id/txt_Show" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:freezesText="@bool/r" 
     android:text="TextView" /> 

</LinearLayout> 
</RelativeLayout> 

的Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.sms" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="15" /> 


    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 
     <activity android:name=".SMS" 
        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=".SmsReceiver"> 
      <intent-filter > 
       <action android:name= 
        "android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 
    <uses-permission android:name="android.permission.SEND_SMS"> 
    </uses-permission> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"> 
    </uses-permission> 
</manifest> 

不能使用的setText或视图的类似

txtshow.setText( “smsContentEtc”)的任何其他方法;

为了修改你的文本视图,首先你应该使用R.findViewById并初始化你的视图,但是因为你的类没有从Activity扩展你不能使用它。相反,我建议你使用Shared Preferences

此外,如果你不想在收件箱中的短信,你可以使用AbortBroadcast

+0

我不知道AbortBroadcast和共享偏好是什么!!!!我应该改变我的计划?请帮我换我的代码! –

+0

@inankupeli:你能给我们一个关于如何使用Shared Preferences的示例吗? – jaypabs