電話がデフォルト設定に保存されている文字列を含む SMS を受信した場合にトースト メッセージをトリガーするアプリケーションを作成しようとしています。私の問題は、SMS を受信したときにトーストが表示されないことです。宣言された文字列を使用してレシーバーのコードをテストしましたが、機能しますが、保存された設定を使用しても表示されません。ここに私のサンプルコードがあります:
public class Main extends Activity{
private static final int RESULT_SETTINGS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Intent i = new Intent(this, Settings.class);
startActivityForResult(i, RESULT_SETTINGS);
break;
}
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_SETTINGS: display(); break;
}
}
private void display(){
TextView displayv = (TextView) findViewById(R.id.mysettings);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
// codes that display
}
そして受信機はこちら
public class WakeSMS extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
SharedPreferences sharedPrefs = context.getSharedPreferences("sharedPrefs", context.MODE_PRIVATE);
String trigger=sharedPrefs.getString("smsstr","NULL");
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str= "SMS from";
if(bundle != null){
Object[] pdus =(Object[])bundle.get("pdus");
msgs=new SmsMessage[pdus.length];
for (int i = 0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
if(i==0){
str+= msgs[i].getOriginatingAddress();
str+=": ";
}
str+=msgs[i].getMessageBody().toString();
}
if(str.contains(trigger)){
Toast.makeText(context, str, Toast.LENGTH_LONG).show();
}
}
}}
私の主な活動では、コードを取得して設定を表示できますが、レシーバーではトーストをトリガーできません。私が間違っていることはありますか?(私の受信機は、将来アラームをトリガーすることになっているため、WakeSMS と呼ばれますが、今はテストのためにトーストをトリガーしたいだけです)
編集:コードで設定を宣言した方法がおそらく間違っていると感じていますが、設定の値がメインに表示される可能性があるため、何が間違っているのかを理解しようとして途方に暮れていますアクティビティですが、レシーバーでは使用できません。