Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库中存储的号码接收SMS_Java_Android_Database_Sms - Fatal编程技术网

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,您需要将public
BroadcastReceiver
装箱,以捕获
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感谢您的回复。