English 中文(简体)
Android:接受ms和ps
原标题:Android : problems with process in receiving sms and gps

in my emulator my program is success to install but going to stop processing when i send sms to trigger the program from another emulator, running gps program and send the location back to another emulator that send the sms trigger here is the code plz help me..

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]);
                }

            }
        }
    }
}

android 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
问题回答

登出的左轮机说,安妮正在寻找一个称为feliks.skripsi.SmsIntentReceiver的班子,但可以发现。 这一类别很可能在你本人的露言中被定义为接收人。 如果贵方的口号是这样,则检查。

EDIT: the new error you got is an Application Not Responding (ANR). Android requires broadcast receivers to do all processing within 10 seconds. If the receiver s onReceive() method takes longer than that to complete then the process will be killed by Android. Make sure you do all processing that may take a while (e.g. networking operations) in a separate thread or service. More information on how to solve ANRs can be found here and here





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签