2012-01-16 52 views
0

在我的模拟器中我的程序是成功安装,但当我发送短信从另一个模拟器触发程序,运行GPS程序并将位置发送回另一个模拟器即发送短信触发 这里是代码plz帮助我..Android:接收短信和GPS的过程中的问题

package feliks.skripsi; 

import android.app.PendingIntent; 
import android.os.Bundle; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.Criteria; 

import android.telephony.SmsManager; 
import android.telephony.SmsMessage; 
import android.util.Log; 

public class SmsIntentReceiver extends BroadcastReceiver { 
    /** Called when the activity is first created. */ 
    double lat, lon; 

    Context context; 

     public void triggerApp (Context context){ 
     Intent broadcast = new Intent ("feliks.skripsi.WAKE_UP"); 
     broadcast.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity (new Intent(broadcast)); 
    } 


    public void getLocation(){ 
     //Location loc; 

     //LocationProvider locPro; 
     //List<LocationProvider> proList; 

     //setContentView(R.layout); 

     LocationManager lm; 


    lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 

    Criteria criteria = new Criteria(); 
    criteria.setAccuracy (Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 

    String provider = lm.getBestProvider(criteria, true); 

    Location location = lm.getLastKnownLocation(provider); 

    updateWithNewLocation(location); 

    lm.requestLocationUpdates(provider, 2000, 20, locationListener);  
    } 

private final LocationListener locationListener = new LocationListener(){ 
    public void onLocationChanged (Location location){ 
     updateWithNewLocation(location); 
    } 

    private void updateWithNewLocation(Location location) { 
     // TODO Auto-generated method stub 

    } 

    public void onProviderDisabled (String provider){ 
     updateWithNewLocation(null); 
    } 

    public void onProviderEnabled (String provider) { 

    } 
    public void onStatusChanged (String provider, int status, Bundle extras){ 

    } 

}; 

private void updateWithNewLocation(Location location) { 
    // TODO Auto-generated method stub 
    if (location != null){ 
     lat = location.getLatitude(); 
     lon = location.getLongitude(); 
    } 

} 

private void sendGPSData (Context context, Intent intent, SmsMessage inMessage){ 

    String sendData = "Loc: lat: "+lat+"long: "+lon; 
    SmsManager mng = SmsManager.getDefault(); 
    PendingIntent dummyEvent = PendingIntent.getBroadcast(context, 0, new Intent("feliks.skripsi.IGNORE_ME"), 0); 

    String addr = inMessage.getOriginatingAddress(); 
    if (addr ==null) 

    {Log.i("SmsIntent", "Unable to receive Phone Number from Sent message");} 

    try{ 
     mng.sendTextMessage(addr, null, sendData, dummyEvent, dummyEvent); 
    }catch(Exception e){ 
     Log.e("SmsIntent", "SendException", e); 
    } 

} 

private SmsMessage[] getMessagesFromIntent (Intent intent){ 

    SmsMessage retMsgs[] = null; 
    Bundle bdl = intent.getExtras(); 
    try{ 
     Object[] pdus = (Object[]) bdl.get("pdus"); 
     retMsgs = new SmsMessage[pdus.length]; 
     for (int n=0; n <pdus.length; n++) 
     { 
      byte[] byteData = (byte[])pdus[n]; 
      retMsgs[n] = SmsMessage.createFromPdu(byteData); 
    } 
}catch (Exception e) 
{ 
    Log.e("GetMessages", "fail", e); 
} 
return retMsgs; 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     if (!intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) 
     { 
      return; 
     } 
     SmsMessage msg[] = getMessagesFromIntent (intent); 
     for (int i=0; i<msg.length; i++) 
     { 
      String message = msg[i].getDisplayMessageBody(); 
      if(message != null && message.length() >0) 
      { 
       Log.i("MessageListner:", message); 
       //trigger message 
       if (message.startsWith("SMSTrigger: Start Aplikasi ")) 
       { 
        triggerApp(context); 
       } 
       else if (message.startsWith("LBSLocatorOn")) 
       { 
        getLocation(); 
        sendGPSData(context, intent,msg[i]); 
       } 

      } 
     } 
    } 
} 

机器人的manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="feliks.skripsi" 
     android:versionCode="1" 
     android:versionName="1.0"> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
<uses-permission android:name="android.permission.BROADCAST_SMS"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.READ_SMS"></uses-permission> 
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission> 


    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".Screen" 

        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <action android:name="feliks.skripsi.WAKE_UP"/> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <uses-library android:name="com.google.android.maps"></uses-library> 


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




    </application> 
</manifest> 

这是新的错误日志

01-20 20:22:48.920: ERROR/ActivityManager(71): ANR in com.android.email 
01-20 20:22:48.920: ERROR/ActivityManager(71): Reason: Broadcast of Intent { act=android.intent.action.BOOT_COMPLETED cmp=com.android.email/com.android.exchange.BootReceiver } 
01-20 20:22:48.920: ERROR/ActivityManager(71): Load: 5.87/3.05/1.24 
01-20 20:22:48.920: ERROR/ActivityManager(71): CPU usage from 82276ms to 268ms ago: 
01-20 20:22:48.920: ERROR/ActivityManager(71): system_server: 11% = 6% user + 4% kernel/faults: 2398 minor 16 major 
01-20 20:22:48.920: ERROR/ActivityManager(71): ndroid.launcher: 4% = 2% user + 1% kernel/faults: 3311 minor 20 major 
01-20 20:22:48.920: ERROR/ActivityManager(71): m.android.phone: 3% = 2% user + 1% kernel/faults: 826 minor 1 major 
01-20 20:22:48.920: ERROR/ActivityManager(71): zygote: 2% = 1% user + 0% kernel/faults: 1837 minor 16 major 
01-20 20:22:48.920: ERROR/ActivityManager(71): adbd: 0% = 0% user + 0% kernel/faults: 2 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): kswapd0: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): putmethod.latin: 0% = 0% user + 0% kernel/faults: 358 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): qemud: 0% = 0% user + 0% kernel/faults: 6 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): zygote: 0% = 0% user + 0% kernel/faults: 300 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): pdflush: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): installd: 0% = 0% user + 0% kernel/faults: 52 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): events/0: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): rild: 0% = 0% user + 0% kernel/faults: 35 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): netd: 0% = 0% user + 0% kernel/faults: 4 minor 
01-20 20:22:48.920: ERROR/ActivityManager(71): +roid.alarmclock: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): +com.android.mms: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): +d.process.media: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): +s:FriendService: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): +e.process.gapps: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): +m.android.email: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): +e.process.gapps: 0% = 0% user + 0% kernel 
01-20 20:22:48.920: ERROR/ActivityManager(71): TOTAL: 100% = 70% user + 28% kernel + 0% iowait + 0% irq + 0% softirq 
+0

嗨亚历山大,欢迎来到Stack Overflow!请更清楚地说明你的问题。 “停止处理”可能意味着任何事情。有没有例外?你究竟想达到什么目的?你为什么需要2个仿真器? – THelper 2012-01-16 12:31:56

+0

感谢您的回应,我想做一个应用程序,可以从模拟器发送GPS位置到另一个模拟器使用短信,但它停止工作时,我发送短信请求GPS位置。例如模拟器5556正在从仿真器5554(安装应用程序的位置)请求gps位置,但是当我调试程序没有任何问题时,我错过了什么? – 2012-01-16 14:28:35

+0

好吧,“停止工作”意味着应用程序仍在运行,但没有任何反应?或者应用程序关闭了它?你确定第二个模拟器正在接收短信吗? – THelper 2012-01-16 14:35:07

回答

0

您发布的stacktrace表示Android正在寻找名为feliks.skripsi.SmsIntentReceiver的类,但找不到它。这个类可能在您的manifest.xml文件中定义为接收者。检查你的应用是否有一个具有这个确切名称的类。

编辑:你得到的新错误是应用程序没有响应(ANR)。 Android需要广播接收器在10秒内完成所有处理。如果接收者的onReceive()方法花费比完成时间更长的时间,那么该进程将被Android终止。确保在单独的线程或服务中执行可能需要一段时间的所有处理(例如,网络操作)。更多关于如何解决ANR的信息可以参考herehere

+0

我已经检查过在manifest.xml中定义的类名被重新定义为接收者的类LBS,但它又有同样的错误,只是这次不是SmsIntentReceiver而是LBS – 2012-01-20 13:50:23

+0

请添加你的manifest.xml到你的问题。 – THelper 2012-01-20 14:00:28

+0

我已经在我的脚本中添加了一些东西,并且在重新构建应用程序之后也更改了LBS类,该过程仍在第一个触发器上工作,但在第二个触发器中停止工作 – 2012-01-20 14:32:35