首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电池无活动状态仅使用broadcastreceiver

电池无活动状态仅使用broadcastreceiver
EN

Stack Overflow用户
提问于 2012-06-08 00:54:00
回答 1查看 3K关注 0票数 1

嗨,我正在制作一个只使用广播接收器的应用程序。它有三个目的。当接收到包含特定代码的SMS时,它发送GPS数据。另一个代码发送传感器数据。到目前为止,没有任何问题。但是对于电池,我无法做到这一点,因为注册接收器()函数。由于我没有使用activity和onCreate方法,我可以在收到短信时发送电池数据吗?

当我试图在broadcastreceiver的onreceive()方法中调整它时,我的应用程序崩溃了。我搜索了所有创建活动的地方。我只想在广播接收器内做所有的事情。

我的代码是这样的:

代码语言:javascript
复制
public class MyPhoneReceiver extends BroadcastReceiver{
double current_lat,current_lng;
LocationManager mlocManager;
LocationListener mlocListener;
//addition//////////////////////////////
SensorManager mSensorManager;

Sensor mAccelerometer;  
////////////////////

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SMSBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Intent recieved: rama" + intent.getAction());


Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (messages.length > -1) {
String messagebody=messages[0].getMessageBody();
Log.i(TAG, "Message recieved: in message receied " + messages[0].getMessageBody());
if(messagebody.toString().matches("HDPK GPS"))
{
Log.i(TAG, "Message recieved: HDPK RECEIVED " + messages[0].getMessageBody());
mlocManager=(LocationManager)context.getSystemService(context.LOCATION_SERVICE);
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,1,new MyLocationListener());
}
if(messagebody.toString().matches("HDPK SENS"))
{
Log.i(TAG, "Message recieved: in msensior ");
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(new MySensorListener(), mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
if(messagebody.toString().matches("HDPK BAT"))
{
Log.i(TAG, "Message recieved: in battery ");
IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batt=context.registerReceiver(null,filter);
int level = batt.getIntExtra("EXTRA_LEVEL", 0);
Log.i(TAG, "Message recieved: in battery level is "+level);
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814", null, "Level is"+level, null,null);
}



}
}
}

public class MySensorListener implements SensorEventListener
{
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub

}

public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
Log.i(TAG, "Message recieved: in msensior event change ");
float x = event.values[0];

float y = event.values[1];

float z = event.values[2];
SmsManager sender=SmsManager.getDefault();
String Text="x :"+x+" Y:"+y+ " Z:"+z;
sender.sendTextMessage("9762281814",null, Text, null, null);
mSensorManager.unregisterListener(this);
}

}

public class MyLocationListener implements LocationListener{

public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
current_lat=location.getLatitude();
current_lng=location.getLongitude();
SmsManager sender=SmsManager.getDefault();
String Text = "My Location is : Latitude ->" +current_lat+" Longitude ->" + current_lng;
sender.sendTextMessage("9762281814", null, Text, null, null);

mlocManager.removeUpdates(this);

}

public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}


}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 16:36:36

在使用registerReceiver()更换粘滞电池的Intent时,尝试使用应用程序Context而不是广播接收器Context。如下所示:

代码语言:javascript
复制
IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batt=context.getApplicationContext().registerReceiver(null,filter);
int level = 99; // Default to some unknown/wild value
// registerReceiver method call could return null, so check that!
if (batt != null) {
    level = batt.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10936320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档