public class PassiveSms extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPref= getSharedPreferences("chaosdriver", Context.MODE_PRIVATE);
int speedLimit = sharedPref.getInt("speedLimit", 1000);
String message = sharedPref.getString("message", "I'm sorry, but I am driving. I will text you when I am able!");
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (lastKnownLocation.getSpeed() > speedLimit)
{
Bundle extras = intent.getExtras();
if (extras == null)
{
return;
}
abortBroadcast();
Object[] pdus = (Object[]) extras.get("pdus");
SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[0]);
String origNumber = msg.getOriginatingAddress();
onSend(origNumber);
}
}
public void onSend(String px)
{
String reply = "testest";
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(px, null, reply, null, null);
}
}
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="biz.midl.drivereply.PassiveLocationChangedReceiver"
android:enabled="true" />
<activity
android:name="biz.midl.drivereply.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="biz.midl.drivereply.Settings"
android:label="@string/title_activity_settings" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="biz.midl.drivereply.PassiveSms"
android:label="@string/title_activity_passive_sms" >
</activity>
<receiver android:name="biz.midl.drivereply.SMSReceiver" >
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<service android:name=".MyService">
<intent-filter>
<action android:name="com.example.MyService"/>
</intent-filter>
</service>
</application>
有什么建议吗?
您必须使用:
context.getSharedPreferences("chaosdriver", Context.MODE_PRIVATE);
因为SharedPreferences只能从上下文中使用。BroadcastReceiver有适当的上下文变量作为onReceive()方法的第一个参数,所以您可以“毫无疑问地”使用它。
现在它应该工作和解决你的问题。
问题内容: 使用SharedPreferences,此活动在启动时崩溃。首先,我将发布活动代码,然后将我的LogCat发布。非常感谢你们,你们总是有很大帮助!:-) 活动代码; 这是我的LogCat; 问题答案: 您必须在调用onCreate之后访问共享首选项。否则上下文将为null :)这就是为什么您会得到null指针异常的原因 移动这条线: 在onCreate()中
我在活动中使用notificationcompat.builder,而setAutoCancel(true)工作得很好,但在BroadcastReceiver中就不是这样了--无论用户单击了多少次,通知都一直显示在设备中。在这种情况下,如何禁用用户点击时的通知? Builder.SetContentIntent(pi);
我使用sharedpreferences保存了一些变量,但是我的save方法使应用程序崩溃,出现了空指针异常。 getSharedPreferences()本身不能工作,需要有上下文。在它之前,这可能是一个问题。我已经定义了上下文,导入了SharedPreferences,那么为什么这不起作用呢?
我想在下面的代码中通过SharedPreferences保存我的ToggleButton状态。请引导我。非常感谢。
问题内容: 有没有一种方法可以在共享首选项中设置默认值? 这是我的负载偏好代码 这是我的保存偏好代码 问题答案: 当您使用键和值设置首选项时,实际上是在提供该值。因此,这次不必使用默认值。请参见,在检索该值时,如果以前未设置该值,则可以定义一个默认值。 如果您得到strSavedMem1 =“ default”,那么肯定是默认情况,因为您没有在首选项中为MEM1设置任何其他值
问题内容: 在MainActivity中,我有一个TextView:textV1。我在MainActivity中也有一个更新该textview的方法: 在BroadcasrReceiver中,我需要在MainActivity中更新textV1中的文本。 如何才能做到这一点?BroadcastReceiver从服务运行。我无法更改此代码。我可以从onReceive()访问和更改MainActivit