(英語で申し訳ありません) 私は、telit gt864-quad モデム GSM を搭載した Picdem.net2 dev カードを入手しました。devカードに接続されているものに問題がある場合(たとえば、ウォーターコントローラーの問題)、devカードは私のAndroid携帯にSMSを送信して、私を防ぎます。
SMS が来ると、通知が表示され、"etat" (状態) という名前の別のアクティビティで "alert" チェックボックスをオンにする必要があります。SMS アクティビティの名前は「SMSReceive」です。
実際、私は SMS を受け取ることができ、それをクリックするとアプリにつながるアラート通知が表示されます。しかし、チェックボックスをオンにする方法がわかりません...
(CheckBox)findViewById(R.id. ...) が機能しません。
package com.example.locatiris;
import android.net.Uri;
import android.os.Bundle;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.BroadcastReceiver;
import android.content.res.Resources;
import android.support.v4.app.NotificationCompat;
import android.telephony.SmsMessage;
import android.widget.Toast;
import android.app.PendingIntent;
import android.widget.CheckBox;
public class SMSReceive extends BroadcastReceiver
{
CheckBox water = null;
private static final int Notification_ID = 1234;
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
//SMS pdus = format de SMS
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for(int i=0; i<smsMessage.length; i++)
{
smsMessage[i] = SmsMessage.createFromPdu((byte[])messages[i]);
//récupérer le numéro
String msg_from = smsMessage[i].getOriginatingAddress();
//Récuperer message
String msg_cont = smsMessage[i].getMessageBody();
if(msg_from.equals("+33NUMBER") & msg_cont.contains("water"))
{
Toast toast = Toast.makeText(context,
"Message reçu " + smsMessage[0].getMessageBody(),
Toast.LENGTH_LONG);
toast.show();
//faire une action lors de réception
createNotification(context);
}
}
}
}
「etat」アクティビティを開始する方法は次のとおりです。
public class etat extends Activity// implements View.OnClickListener
{
EditText Chau = null;
EditText Vann = null;
EditText Serr = null;
EditText Digi = null;
Button Actu = null;
@Override
public void onCreate(Bundle savedInstanceState)
{ ...
通知作成者は次のとおりです。
private final void createNotification(Context context2)
{
//vibreur spécial
long[] a = {0, 200, 200, 200, 500, 200, 500, 200, 200, 500, 200 };
//creer notification et ses parametres
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context2)
.setSmallIcon(R.drawable.ic_launcher)
.setTicker("Problème location détecté")
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setVibrate(a)
.setSound(Uri.parse("file:///sdcard/Music/ZOUZ2.mp3"))
.setContentTitle("ALERTE Location")
.setContentText("Un problème est survenu dans la location");
//ouvrir l'application au clic sur notification
Intent notificationIntent = new Intent(context2, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context2, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
NotificationManager manager = (NotificationManager) context2.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(Notification_ID, builder.build());
}
助けてくれてありがとう!