Java 从数据库中存储的号码接收SMS
我有一个数据库,它的用户可以在应用程序商店中使用。 我想得到一条只来自这些号码的短信。 基本上我应该做什么 请帮帮我,谢谢 数据库助手:Java 从数据库中存储的号码接收SMS,java,android,database,sms,Java,Android,Database,Sms,我有一个数据库,它的用户可以在应用程序商店中使用。 我想得到一条只来自这些号码的短信。 基本上我应该做什么 请帮帮我,谢谢 数据库助手: public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "PhoneNumber.db"; public static final String TABLE_NAME = "number_table"; public s
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "PhoneNumber.db";
public static final String TABLE_NAME = "number_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "NUMBER";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("Create table " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,NUMBER INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String number){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2,number);
long result = db.insert(TABLE_NAME, null, contentValues);
if(result == -1)
return false;
else
return true;
}
public ArrayList getAllrecord(){
ArrayList array_list = new ArrayList();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from admin", null);
res.moveToFirst();
while (res.isAfterLast()== false){
array_list.add(res.getString(res.getColumnIndex("number")));
res.moveToNext();
}
return array_list;
}
接收信息:
public class ReceiveMessage extends BroadcastReceiver {
final SmsManager mysms = SmsManager.getDefault();
@Override
public void onReceive(Context context, Intent intent) {
Bundle mybundel = intent.getExtras();
try {
if(mybundel !=null){
final Object[] messageContent=(Object[])mybundel.get("pdus");
String smsMessageStr = "";
for (int i=0;i<messageContent.length;i++){
SmsMessage mynewsms = SmsMessage.createFromPdu((byte[]) messageContent[i]);
NewMessageNotification nome = new NewMessageNotification();
nome.notify(context,mynewsms.getDisplayOriginatingAddress(),mynewsms.getDisplayMessageBody(),i);
i++;
String smsBody = mynewsms.getMessageBody().toString();
String address = mynewsms.getOriginatingAddress();
smsMessageStr += "SMS From: " + address + "\n";
smsMessageStr += smsBody + "\n";
}
Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();
//this will update the UI with message
SmsInbox inst = SmsInbox.instance();
inst.updateList(smsMessageStr);
}
}
catch (Exception ex){
}
}
公共类ReceiveMessage扩展了BroadcastReceiver{
final smsmsmanager mysms=smsmsmanager.getDefault();
@凌驾
公共void onReceive(上下文、意图){
Bundle mybundel=intent.getExtras();
试一试{
如果(mybundel!=null){
最终对象[]消息内容=(对象[])mybundel.get(“PDU”);
字符串SMSMessagester=“”;
对于(int i=0;i,您需要将publicBroadcastReceiver
装箱,以捕获IncomingSms
为此,您需要在清单文件中添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<receiver android:name="com.androidexample.broadcastreceiver.IncomingSms">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
在清单文件中添加接收方标记
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<receiver android:name="com.androidexample.broadcastreceiver.IncomingSms">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
创建IncomingSms.java类
public class IncomingSms extends BroadcastReceiver {
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the 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 phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
// Show Alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context,"senderNum: "+ senderNum + ", message: " + message, duration);
toast.show();
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
}
public class IncomingSms扩展广播接收器{
//获取SmsManager的对象
final smsmsmanager sms=smsmsmanager.getDefault();
公共void onReceive(上下文、意图){
//从意图检索扩展数据的映射。
final Bundle=intent.getExtras();
试一试{
if(bundle!=null){
最终对象[]pdusObj=(对象[])bundle.get(“pdus”);
对于(int i=0;i
您需要使用SQLite查询将传入的SMS号码与数据库相匹配,选择您可以在Google上很容易找到的查询。您必须在DatabaseHelper.java中声明一个函数来检查号码是否存在
public bool isExists(String Number)
其中有如下查询:
Select count(*) from number_table where number = 'Number'
然后将这些代码添加到接收器中
String smsBody = mynewsms.getMessageBody().toString();
String address = mynewsms.getOriginatingAddress();
if(dbHelper.isExists(address)){
smsMessageStr += "SMS From: " + address + "\n";
smsMessageStr += smsBody + "\n";
}
PS:别忘了添加所需的权限;)Koorosh Ghorbani感谢您的回复。