2012-03-09 70 views
1

我正在创建一个SMS fording应用程序。我目前有两堂课;一个主要的Activity类将被用来修改设置和使用BroardcastReceiver的smsListener类。但是,我无法解决如何启动smsListener类。对于裁判推出BroardcastReceiver类

package sms.pack; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.os.Environment; 
import android.telephony.SmsMessage; 
import android.util.Log; 

public class SmsListener extends BroadcastReceiver{ 

    private SharedPreferences preferences; 

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

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String device = "mobile_num_here"; //number to listen for 
      String msg_from; 
      if (bundle != null){ 
       //---retrieve the SMS message received--- 
       try{ 
        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]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
         if (msg_from == device) 
         { 
          savedata(msgBody); 
         } 
        } 
       }catch(Exception e){ 
//       Log.d("Exception caught",e.getMessage()); 
       }    
      } 
     } 
    } 
    public void savedata(String data) 
    { 
     try { 
      File root = Environment.getExternalStorageDirectory(); 
      if (root.canWrite()){ 
       File gpxfile = new File(root, "smsfile.txt");//remember change directory 
       FileWriter gpxwriter = new FileWriter(gpxfile); 
       BufferedWriter out = new BufferedWriter(gpxwriter); 
       out.write(data); 
       out.close(); 
      } 
     } catch (IOException e) { 
      Log.e(data,"Could not write file " + e.getMessage()); 
     } 
    } 
} 

代码smsListener类的,我刨使用意图启动是不工作,方法如下

public void startListening(View view) 
{ 
    Intent i = new Intent(); 
    i.setClassName("sms.pack","sms.pack.SmsListener"); 
    startActivity(i); 
} 

回答

1

你只用startActivity推出的活动。
A BroadcastReceiver收听广播的意图。使用sendBroadcast(intentToBroadcast)。确保你在清单文件中放置了一个receiver标签。

+0

感谢您的帮助 – 2012-03-09 01:41:04

+0

'code'Intent i = new Intent(); i.setClassName(“sms.pack”,“sms.pack.SmsListener”); sendBroadcast(i); 但这却出现在工作的时候我调试= sms.pack.SMS_forwardActivity.startListening(查看) 在这里我要感谢我应该等于sms.pack.startLister 任何关于如何测试中,我没有得到一个保存文件时调试调试不会进入StartLister类。任何想法为什么? 谢谢 – 2012-03-09 01:51:02

+0

soory我坏我是正确的价值 – 2012-03-09 01:59:07

0

您必须先注册您的广播接收机。

Intent i = new Intent(your_Activity_Class.this, SmsListener.class); 
    startActivity(i); 

希望这有助于:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity .... 
    </activity> 
    <receiver android:name="SmsListener "> 
     <intent-filter android:priority="100" > 
      <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

通过启动广播接收器。