2012-08-04 77 views
0

我是新来的android,我需要你的帮助。 我试图在警报对话框上显示新的传入消息?并且使可点击的内容“链接”的消息clickable link in message android

这是我的邮件活动

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); 
} 
    } 

回答