2012-12-27 4 views
0

Я создаю приложение для Android, в котором хранятся SMS-сообщения, когда они получены. Пожалуйста, взгляните на код и ответьте, что с ним не так.Хранить SMS при получении

private BroadcastReceiver receiver = new BroadcastReceiver() { 

    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     if (intent.getAction() == SMS_RECEIVED){ 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String addr = null,msg=null; 
     if (bundle != null) 
     { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 
      for (int i=0; i<msgs.length; i++) 
      { 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
       addr = msgs[i].getOriginatingAddress();      
       msg= msgs[i].getMessageBody().toString(); 
       Calendar c = Calendar.getInstance(); 
      java.util.Date currDT= c.getTime(); 
      String name = c2.getString(c2.getColumnIndex("name")); 
      db.execSQL("INSERT INTO inbox (num,msg,tm) VALUES('"+ addr + "','"+ msg + "','"+currDT+"')"); 
     Toast.makeText(context, "Message Received from "+addr, Toast.LENGTH_SHORT).show(); 
     } }} 
};}; 
+2

Вы не должны лучше знать, что случилось с ним? Это работает, но плохо? Это хорошо работает, но вы хотите, чтобы это было лучше? Это не так? Если да, с какой ошибкой (ошибками)? – Amadan

+0

он вообще не работает !! – user1900870

+0

@ user1900870: где вы создаете экземпляр класса «db» класса базы данных –

ответ

0

использовать этот путь:

я использовал службу, потому что он работает в фоновом режиме более 30 секунд.

Ваш Массаж Reciver:

package com.massage_rec; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 

public class MyPhoneReceiver extends BroadcastReceiver { 
    SharedPreferences sp; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     Bundle bundle = intent.getExtras(); 
     SmsMessage[] msgs = null; 
     String str = ""; 
     if (bundle != null) { 

      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 
      for (int i = 0; i < msgs.length; i++) { 
       msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       str += "SMS from " + msgs[i].getOriginatingAddress(); 
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n"; 
      } 

     } 

     sendMail(context, str); 

    } 

    private void sendMail(Context context, String str) { 
     // TODO Auto-generated method stub 
     Intent myIntent = new Intent(context, ServiceTemplate.class); 
     myIntent.putExtra("extraData", "" + str); 
     context.startService(myIntent); 
    } 

} 

ServiceTemplate.java

package com.massage_rec; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import android.app.Service; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.IBinder; 
import android.preference.PreferenceManager; 
import android.util.Log; 

public class ServiceTemplate extends Service { 

    String address = ""; 
    String CALL_DETAILS; 
    String SMS_STR = ""; 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 


    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 


      new LongOperation_().execute(""); 


     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    private class LongOperation_ extends AsyncTask<String, Void, String> { 

     protected String doInBackground(String... params) { 

      try { 

       getSMS(); 

      } catch (Exception e) { 
       Log.e("error before mail sent-->", "" 
         + e.getMessage().toString()); 
       e.printStackTrace(); 
      } 

      return ""; 
     } 

     protected void onPostExecute(String result) { 
      // Log.e("post exe", "------- post exe"); 
      Intent myIntent = new Intent(getApplicationContext(), ServiceTemplate.class); 

        getApplicationContext().stopService(myIntent); 
     } 

     protected void onPreExecute() { 
     } 

     protected void onProgressUpdate(Void... values) { 
     } 
    } 

    public void getSMS() { 

     Context con = getApplicationContext(); 
     Uri myMessage = Uri.parse("content://sms/"); 
     ContentResolver cr = con.getContentResolver(); 
     Cursor c = cr.query(myMessage, new String[] { "_id", "address", "date", 
       "body", "read" }, null, null, null); 

     // startManagingCursor(c); 
     // getSmsLogs(c, con); 
     int i = 0; 

     try { 

      if (c.moveToFirst()) { 
       do { 

        if (c.getString(c.getColumnIndexOrThrow("address")) == null) { 
         c.moveToNext(); 
         continue; 
        } 

        String _id = c.getString(c.getColumnIndexOrThrow("_id")) 
          .toString(); 

        String Number = c.getString(
          c.getColumnIndexOrThrow("address")).toString(); 
        String dat = c.getString(c.getColumnIndexOrThrow("date")) 
          .toString(); 

        // String as = (String) get_dt(dat, "dd/MM/yyyy, hh.mma"); 
        String Body = c.getString(c.getColumnIndexOrThrow("body")) 
          .toString(); 

        SMS_STR = "num: " + Number + "\n"; 
        SMS_STR = "date: " + dat + "\n"; 
        SMS_STR = "Body: " + Body + "\n"; 
        SMS_STR = "\n\n\n"; 

        if (i > 1) { 
         break; 
        } 
        i++; 

       } while (c.moveToNext()); 
      } 
      c.close(); 

       db.inserSMS(Name,dat,Body); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

добавить ниже код в файле манифеста Android:

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> 
    <uses-permission android:name="android.permission.READ_LOGS"></uses-permission> 
    <uses-permission android:name="android.permission.READ_SMS"></uses-permission> 

<receiver android:name=".MyPhoneReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 

      </intent-filter> 
     </receiver> 
<service android:name=".ServiceTemplate" android:enabled="true"></service> 

для вставки на сайт, чтобы БД SQLite проверить эту ссылку clickhere

Создайте базу данных таким образом и вставьте в БД.

0
private BroadcastReceiver receiver = new BroadcastReceiver() {} 

, который должен дать ошибку компиляции. Изменить имя на что-то вроде,

class SomeBroadcastReceiver extends BroadcastReceiver() {} 

А также не забудьте объявить его в AndroidManifest.xml файл

Смежные вопросы