读了特定数目的收件箱的消息和一个活动显示它们 [英] Read inbox messages of a particular number and display them in an activity
问题描述
我想从收件箱中读取消息,并在活动中显示出来。我的活动包含一个按钮和列表视图。当我按一下按钮,将显示从收件箱中的所有邮件。但我的要求是,我需要从一个特定的号码查看邮件。我的应用程序没有运行,当我得到这个数字的消息时,我点击点击按钮,只有特定信息(与一个特定的号码相关联)必须更新。 以下是有关code。
myActivity.java:
公共类SecureMessagesActivity扩展活动实现OnClickListener,OnItemClickListener {
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme_Light);
的setContentView(R.layout.main);
this.findViewById(R.id.UpdateList).setOnClickListener(本);
}
ArrayList的<字符串> smsList =新的ArrayList<字符串>();
公共无效onItemClick(适配器视图<>母公司视图中查看,INT POS,长ID){
尝试 {
的String []分裂= smsList.get(POS).split(\ N);
串发件人=分裂[0];
字符串的EncryptedData =;
的for(int i = 1; I< splitted.length ++我){
的EncryptedData + =分裂[I]
}
字符串数据=发送+\ N+ StringCryptor.decrypt(新的String(SmsReceiver.PASSWORD)的EncryptedData);
Toast.makeText(这一点,数据,Toast.LENGTH_SHORT).show();
}
赶上(例外五){
e.printStackTrace();
}
}
公共无效的onClick(视图v){
ContentResolver的ContentResolver的= getContentResolver();
光标光标= contentResolver.query(Uri.parse(内容://短信/收件箱),NULL,NULL,NULL,NULL);
INT indexBody = cursor.getColumnIndex(SmsReceiver.BODY);
INT indexAddr = cursor.getColumnIndex(SmsReceiver.ADDRESS);
如果(indexBody<!0 || cursor.moveToFirst())回报;
smsList.clear();
做 {
字符串str =发件人:+ cursor.getString(indexAddr)+\ N+ cursor.getString(indexBody);
smsList.add(STR);
}
而(cursor.moveToNext());
ListView控件smsListView =(ListView控件)findViewById(R.id.SMSList);
smsListView.setAdapter(新ArrayAdapter<字符串>(这一点,android.R.layout.simple_list_item_1,smsList));
smsListView.setOnItemClickListener(本);
}
}
SmsReceiver.java:
公共类SmsReceiver扩展的BroadcastReceiver {
公共静态最后弦乐SMS_EXTRA_NAME =的PDU;
公共静态最后弦乐SMS_URI =内容://短信;
公共静态最终字符串地址=地址;
公共静态最后弦乐PERSON =人;
公共静态最后弦乐日子=日期;
公共静态最终字符串读=读;
公共静态最后弦乐状态=状态;
公共静态最后弦乐TYPE =类型;
公共静态最后弦乐BODY =身体;
公共静态最后弦乐SEEN =看见;
公共静态最终诠释MESSAGE_TYPE_INBOX = 1;
公共静态最终诠释MESSAGE_TYPE_SENT = 2;
公共静态最终诠释MESSAGE_IS_NOT_READ = 0;
公共静态最终诠释MESSAGE_IS_READ = 1;
公共静态最终诠释MESSAGE_IS_NOT_SEEN = 0;
公共静态最终诠释MESSAGE_IS_SEEN = 1;
公共静态最后一个字节[] PASSWORD =新的字节[] {为0x20,0x32,0x34,0X47,(字节)的0x84,0x33,将0x58};
公共无效的onReceive(上下文的背景下,意图意图){
捆绑额外= intent.getExtras();
串消息=;
如果(临时演员!= NULL){
[对象] smsExtra =(对象[])extras.get(SMS_EXTRA_NAME);
ContentResolver的ContentResolver的= context.getContentResolver();
的for(int i = 0; I< smsExtra.length ++我){
SmsMessage短信= SmsMessage.createFromPdu((字节[])smsExtra [I]);
绳体= sms.getMessageBody()的toString()。
字符串的地址= sms.getOriginatingAddress();
消息+ =短信来自+地址+:\ N的;
消息+ =身体+\ N的;
putSmsToDatabase(ContentResolver的,短信);
}
//显示短信
Toast.makeText(背景下,消息Toast.LENGTH_SHORT).show();
}
// 警告!!!
//如果取消注释下一行则收到短信不会被投入进来。
// 小心!
// this.abortBroadcast();
}
私人无效putSmsToDatabase(ContentResolver的ContentResolver的,SmsMessage SMS){
ContentValues值=新ContentValues();
values.put(地址,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(可见,MESSAGE_IS_NOT_SEEN);
尝试 {
字符串encryptedPassword = StringCryptor.encrypt(新的String(密码),sms.getMessageBody()的toString());
values.put(BODY,encryptedPassword);
}
赶上(例外五){
e.printStackTrace();
}
//推行到SMS表
contentResolver.insert(Uri.parse(SMS_URI),值);
}
}
试试这个code你得到短信pertucular号:
进口的java.util.ArrayList;
进口android.app.Activity;
进口android.content.ContentResolver;
进口android.content.Context;
进口android.database.Cursor;
进口android.net.Uri;
进口android.os.Bundle;
进口android.util.Log;
公共类MainActivity延伸活动{
ArrayList的<字符串> sms_id =新的ArrayList<字符串>();
ArrayList的<字符串> sms_num =新的ArrayList<字符串>();
ArrayList的<字符串> sms_Name =新的ArrayList<字符串>();
ArrayList的<字符串> sms_dt =新的ArrayList<字符串>();
ArrayList的<字符串> sms_body =新的ArrayList<字符串>();
//私人的ImageView ImageView的;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
乌里myMessage = Uri.parse(内容://短信/);
ContentResolver的CR = this.getContentResolver();
光标C = cr.query(myMessage,新的String [] {_id,地址,日期,
身体,读},地址='9180009',NULL,NULL);
startManagingCursor(C);
getSmsLogs(C,MainActivity.this);
}
公共无效getSmsLogs(光标C,上下文CON){
如果(sms_num.size()大于0){
sms_id.clear();
sms_num.clear();
sms_Name.clear();
sms_body.clear();
sms_dt.clear();
}
尝试 {
如果(c.moveToFirst()){
做 {
如果(c.getString(c.getColumnIndexOrThrow(地址))== NULL){
c.moveToNext();
继续;
}
串号= c.getString(
c.getColumnIndexOrThrow(地址))的toString()。
字符串_id = c.getString(c.getColumnIndexOrThrow(_ ID))
的ToString();
字符串DAT = c.getString(c.getColumnIndexOrThrow(日))
的ToString();
绳体= c.getString(c.getColumnIndexOrThrow(身体))
的ToString();
Log.e(身体 - >中,+身体);
sms_id.add(_id);
sms_num.add(数量);
sms_body.add(身体);
}而(c.moveToNext());
}
c.close();
}赶上(例外五){
e.printStackTrace();
}
}
}
检查日志,短信体:你必须使用下面的权限
<使用-权限的Android:名称=android.permission.READ_SMS/>
I am trying to read messages from an inbox and display them in an activity. My activity contains a button and listview. When I click on the button, all messages from the inbox are displayed. But my requirement is that I need to view messages from a particular number. My application is not running when I get messages from that number when I click on the click button only specific messages (associated with a particular number) must be updated. Here's the relevant code.
myActivity.java:
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);
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 );
if ( indexBody < 0 || !cursor.moveToFirst() ) return;
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 );
}
}
SmsReceiver.java:
public class SmsReceiver extends BroadcastReceiver {
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;
public static final byte[] PASSWORD = new byte[]{ 0x20, 0x32, 0x34, 0x47, (byte) 0x84, 0x33, 0x58 };
public void onReceive( Context context, Intent intent ) {
Bundle extras = intent.getExtras();
String messages = "";
if ( extras != null ) {
Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
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";
putSmsToDatabase( contentResolver, sms );
}
// Display SMS message
Toast.makeText( context, messages, Toast.LENGTH_SHORT ).show();
}
// WARNING!!!
// If you uncomment next line then received SMS will not be put to incoming.
// Be careful!
// this.abortBroadcast();
}
private void putSmsToDatabase( ContentResolver contentResolver, SmsMessage sms ) {
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 );
}
}
try this code you get sms for pertucular number:
import java.util.ArrayList;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
ArrayList<String> sms_id = new ArrayList<String>();
ArrayList<String> sms_num = new ArrayList<String>();
ArrayList<String> sms_Name = new ArrayList<String>();
ArrayList<String> sms_dt = new ArrayList<String>();
ArrayList<String> sms_body = new ArrayList<String>();
// private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Uri myMessage = Uri.parse("content://sms/");
ContentResolver cr = this.getContentResolver();
Cursor c = cr.query(myMessage, new String[] { "_id", "address", "date",
"body", "read" }, "address = '+9180009'", null, null);
startManagingCursor(c);
getSmsLogs(c, MainActivity.this);
}
public void getSmsLogs(Cursor c, Context con) {
if (sms_num.size() > 0) {
sms_id.clear();
sms_num.clear();
sms_Name.clear();
sms_body.clear();
sms_dt.clear();
}
try {
if (c.moveToFirst()) {
do {
if (c.getString(c.getColumnIndexOrThrow("address")) == null) {
c.moveToNext();
continue;
}
String Number = c.getString(
c.getColumnIndexOrThrow("address")).toString();
String _id = c.getString(c.getColumnIndexOrThrow("_id"))
.toString();
String dat = c.getString(c.getColumnIndexOrThrow("date"))
.toString();
String Body = c.getString(c.getColumnIndexOrThrow("body"))
.toString();
Log.e("Body-->", "" + Body);
sms_id.add(_id);
sms_num.add(Number);
sms_body.add(Body);
} while (c.moveToNext());
}
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
check log for sms body: you have to use below permission
<uses-permission android:name="android.permission.READ_SMS" />
这篇关于读了特定数目的收件箱的消息和一个活动显示它们的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!