Java Android:接收短信和gps的过程中出现问题
在我的仿真器中,我的程序安装成功,但当我从另一个仿真器发送sms以触发程序、运行gps程序并将位置发送回发送sms触发器的另一个仿真器时,将停止处理 这是代码请帮我Java Android:接收短信和gps的过程中出现问题,java,android,gps,sms,Java,Android,Gps,Sms,在我的仿真器中,我的程序安装成功,但当我从另一个仿真器发送sms以触发程序、运行gps程序并将位置发送回发送sms触发器的另一个仿真器时,将停止处理 这是代码请帮我 package feliks.skripsi; import android.app.PendingIntent; import android.os.Bundle; import android.content.BroadcastReceiver; import android.content.Context; import
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]);
}
}
}
}
}
你发布的stacktrace说Android正在寻找一个名为feliks.skripsi.smsinentreceiver的类,但它找不到。此类可能在manifest.xml文件中定义为接收方。检查您的应用程序是否有具有此确切名称的类
编辑:您得到的新错误是应用程序没有响应ANR。Android要求广播接收器在10秒内完成所有处理。如果接收者的onReceive方法需要更长的时间才能完成,那么进程将被Android终止。确保您在单独的线程或服务中执行所有可能需要一段时间的处理,例如网络操作。可以找到有关如何解决ANR的更多信息,并且嗨,Alexander,欢迎使用Stack Overflow!请更清楚地说明你的问题。停止处理可能意味着什么。有例外吗?你到底想达到什么目的?为什么您需要2个模拟器?感谢您的回复,我想制作一个应用程序,可以使用sms将gps位置从模拟器发送到另一个模拟器,但当我发送请求gps位置的sms时,它停止工作。例如,emulator 5556正在从emulator 5554请求gps定位,emulator 5554安装了应用程序,但当我调试程序时,没有任何错误,我丢失了什么?好的,停止工作意味着应用程序仍在运行,但什么也没有发生?还是应用程序自动关闭?您确定第二个仿真器正在接收短信吗?是的,应用程序仍在运行,但当仿真器从另一个仿真器接收短信时,会出现一条弹出消息,显示应用程序进程停止工作。在那条信息之后,我重复了同样的短信,但有同样的回复。我确信第二个模拟器正在接收sms,因为它在模拟器屏幕上显示sms通知。我想查看您的manifest.xml我已经检查了manifest.xml中定义的类名,该类名再次被重新定义为接收方的类LBS,但它再次出现相同的错误,只是这一次不是smsinentreceiver,而是LBSi在我的列表中添加了一些内容脚本并更改LBS类,重建应用程序后,进程仍在第一个触发器上工作,但在第二个触发器上停止工作
<?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