0

我是android新手,我需要你的帮助。我试图在警报对话框上显示新的传入消息?并使 Clickable 成为消息中的内容“链接”

这是我的消息活动

  public class SecureMessagesActivity extends Activity implements OnClickListener,    OnItemClickListener
 {
  public void onCreate(Bundle savedInstanceState) 
   {
      super.onCreate(savedInstanceState);

    setTheme( android.R.style.Theme_Light );
     setContentView(R.layout.main);

    /**
     * You can also register your intent filter here.
     * And here is example how to do this.
     *
     * IntentFilter filter = new IntentFilter(    "android.provider.Telephony.SMS_RECEIVED" );
     * filter.setPriority( IntentFilter.SYSTEM_HIGH_PRIORITY );
     * registerReceiver( new SmsReceiver(), filter );
    **/

    this.findViewById( R.id.UpdateList ).setOnClickListener( this );
   }

    ArrayList<String> smsList = new ArrayList<String>();

  public void onItemClick( AdapterView<?> parent, View view, int pos, long id ) 
{
    try 
    {
        String[] splitted = smsList.get( pos ).split("\n"); 
        String sender = splitted[0];
        String encryptedData = "";
        for ( int i = 1; i < splitted.length; ++i )
        {
            encryptedData += splitted[i];
        }
        String data = sender + "\n" + StringCryptor.decrypt( new String(SmsReceiver.PASSWORD), encryptedData );
        Toast.makeText( this, data, Toast.LENGTH_SHORT ).show();
     } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    }

   public void onClick( View v ) 
  {

    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query( Uri.parse( "content://sms/inbox" ), null, null, null, null);

    int indexBody = cursor.getColumnIndex( SmsReceiver.BODY );
    int indexAddr = cursor.getColumnIndex( SmsReceiver.ADDRESS );
    //int indexCont = cursor.getColumnIndex(SmsReceiver.READ);

    if ( indexBody < 0 || !cursor.moveToFirst() ) return;

    Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Simple Alert");  
     builder.setMessage("This is simple alert box");
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.dismiss();  
        }

     });
    smsList.clear();

    do
    {
        String str = "Sender: " + cursor.getString( indexAddr ) + "\n" + cursor.getString( indexBody );
        smsList.add( str );
    }
    while( cursor.moveToNext() );


    ListView smsListView = (ListView) findViewById( R.id.SMSList );
    smsListView.setAdapter( new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, smsList) );
    smsListView.setOnItemClickListener( this );
 }

 public void DisplayAlert() {

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
     builder.setTitle("Simple Alert");  
     builder.setMessage(R.string.app_name);
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.dismiss();  

        }
         });
     AlertDialog alert = builder.create();  
     alert.show();          
}

我的 smsReceive.java

  public class SmsReceiver extends BroadcastReceiver 
    {
// All available column names in SMS table
     // [_id, thread_id, address, 
// person, date, protocol, read, 
// status, type, reply_path_present, 
// subject, body, service_center, 
// locked, error_code, seen]

public static final String SMS_EXTRA_NAME = "pdus";
public static final String SMS_URI = "content://sms";

public static final String ADDRESS = "address";
     public static final String PERSON = "person";
   public static final String DATE = "date";
   public static final String READ = "read";
   public static final String STATUS = "status";
   public static final String TYPE = "type";
   public static final String BODY = "body";
   public static final String SEEN = "seen";

   public static final int MESSAGE_TYPE_INBOX = 1;
    public static final int MESSAGE_TYPE_SENT = 2;

    public static final int MESSAGE_IS_NOT_READ = 0;
  public static final int MESSAGE_IS_READ = 1;

   public static final int MESSAGE_IS_NOT_SEEN = 0;
   public static final int MESSAGE_IS_SEEN = 1;

  // Change the password here or give a user possibility to change it
   public static final byte[] PASSWORD = new byte[]{ 0x20, 0x32, 0x34, 0x47, (byte) 0x84, 0x33, 0x58 };

 public void onReceive( Context context, Intent intent ) 
{
    // Get SMS map from Intent
     Bundle extras = intent.getExtras();

    String messages = "";

    if ( extras != null )
    {
        // Get received SMS array
        Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );

        // Get ContentResolver object for pushing encrypted SMS to incoming folder
        ContentResolver contentResolver = context.getContentResolver();

        for ( int i = 0; i < smsExtra.length; ++i )
        {
            SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);

            String body = sms.getMessageBody().toString();
            String address = sms.getOriginatingAddress();

            messages += "SMS from " + address + " :\n";                    
            messages += body + "\n";



            // Here you can add any your code to work with incoming SMS
            // I added encrypting of all received SMS 

            putSmsToDatabase( contentResolver, sms );
        }


        // Display SMS message
      //  Toast.makeText( context, messages, Toast.LENGTH_SHORT ).show();
      }


}

private void putSmsToDatabase( ContentResolver contentResolver, SmsMessage sms )
{
    // Create SMS row
    ContentValues values = new ContentValues();
    values.put( ADDRESS, sms.getOriginatingAddress() );
    values.put( DATE, sms.getTimestampMillis() );
    values.put( READ, MESSAGE_IS_NOT_READ );
    values.put( STATUS, sms.getStatus() );
    values.put( TYPE, MESSAGE_TYPE_INBOX );
    values.put( SEEN, MESSAGE_IS_NOT_SEEN );
    try
    {
        String encryptedPassword = StringCryptor.encrypt( new String(PASSWORD), sms.getMessageBody().toString() ); 
        values.put( BODY, encryptedPassword );
    }
    catch ( Exception e ) 
    { 
        e.printStackTrace(); 
    }

    // Push row into the SMS table
    contentResolver.insert( Uri.parse( SMS_URI ), values );
}
    }
4

1 回答 1

0

如果您尝试打开 SMS 收件箱,这应该会有所帮助:

如何从字符串资源中获取 AlertDialog 中的可点击超链接?

有意图地启动短信应用程序

使用Linkify建立链接。

于 2012-08-04T17:31:14.180 回答