我开发了这个简单的应用程序,用于收听进入我手机的短信。
正如您在代码中看到的,当SMS到达时,我会扫描其内容以查找特定文本,因此如果不满足此条件,则不会执行任何操作。
真正的问题是,当SMS到达且条件不满足时,创建IF语句以控制何时调用"映射"应用程序是否未执行,但是"映射" app以任一方式调用,并加载与最后一条符合条件的SMS相关的信息。
代码在我的模拟器中与KitKat完美配合,但在我的手机中使用Kitkat 4.4.2正在处理我刚写的行为。
你以前遇到过这样的事吗? 你能告诉我一些解决这个问题的事吗?
这是主要活动
public class MainActivity extends ActionBarActivity {
EditText et_location_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt_manual = (Button) findViewById(R.id.bt_manual);
et_location_data = (EditText) findViewById(R.id.et_location_data);
bt_manual.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String messageBody = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
messageBody = et_location_data.getText().toString();
Common_Functions common_functions = new Common_Functions(getBaseContext(), messageBody);
common_functions.show();
}
}
});
}
@Override
protected void onResume() {
super.onResume();
et_location_data.setText("");
}}
这是广播听众
public class SMS_listener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
String messageBody= "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Telephony.Sms.Intents.getMessagesFromIntent(intent)) {SmsMessage smsMessage = Telephony.Sms.Intents.getMessagesFromIntent(intent)[0];
messageBody = smsMessage.getMessageBody();
Common_Functions common_functions = new Common_Functions(context, messageBody);
common_functions.show();
}
Log.d("Test", "Message body: " + messageBody);
}
}}
这是一个用于代码重用的通用类
public class Common_Functions {
String messageBody= "";
String STR_CODE_LATITUDE = "Latitude";
String STR_CODE_LONGITUDE = "Longitude";
Context context;
String str_Lat = "";
String str_Lon = "";
public Common_Functions(Context context, String messageBody) {
this.context = context;
this.messageBody = messageBody;
}
public void show() {
if (messageBody.toLowerCase().contains("Latitud".toLowerCase())) {
int i = messageBody.toLowerCase().indexOf(STR_CODE_LATITUDE.toLowerCase());
int j = messageBody.toLowerCase().indexOf(STR_CODE_LONGITUDE.toLowerCase());
str_Lat = messageBody.substring(i + 1 + STR_CODE_LATITUDE.length(), i + 1 + STR_CODE_LATITUDE.length() + 10);
str_Lon = messageBody.substring(j + 1 + STR_CODE_LONGITUDE.length(), j + 1 + STR_CODE_LONGITUDE.length() + 11);
if (str_Lat.toLowerCase().contains("s"))
str_Lat = "-" + messageBody.substring(i + 1 + STR_CODE_LATITUDE.length(), i + 1 + STR_CODE_LATITUDE.length() + 9);
else
str_Lat = messageBody.substring(i + 1 + STR_CODE_LATITUDE.length(), i + 1 + STR_CODE_LATITUDE.length() + 9);
if (str_Lon.toLowerCase().contains("w"))
str_Lon = "-" + messageBody.substring(j + 1 + STR_CODE_LONGITUDE.length(), j + 1 + STR_CODE_LONGITUDE.length() + 10);
else
str_Lon = messageBody.substring(j + 1 + STR_CODE_LONGITUDE.length(), j + 1 + STR_CODE_LONGITUDE.length() + 10);
Intent intent1 = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?q=" + str_Lat + "," + str_Lon));
context.startActivity(intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}}
这是清单
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_action"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity
android:name=".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>
<receiver android:name=".SMS_listener">
<intent-filter android:priority="200">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
答案 0 :(得分:0)
我发现了这个应用程序遇到的问题。
由于我在完成我在此处发布的最终代码之前已经进行了多次测试,因此我的手机似乎在缓存中存储了一些奇怪的信息,特别是“消息传递”过程。
当我完全卸载应用程序并在此之后向我的手机发送短信时,我意识到了这一点。令人惊讶的是,即使卸载了应用程序,仍然会调用“地图”应用程序。这让我想到了清除“Messaging”进程和Eureka的缓存,问题就解决了。
未来的经验。但是这个行为似乎是我的Android 4.4.2版本的一个大缺陷,因为我无法想象这个操作系统无法管理这种威胁。