मुझे पता है कि इस सवाल से कई बार पूछा गया है, लेकिन मैंने जो भी देखा है उससे कोई भी काम करने का जवाब नहीं दे पाया है।एसएमएस सामग्री ऑब्सर्वर ऑन चेंज() कई बार आग लगती है
मैं टेक्स्ट संदेशों को रोकने और भेजने के आधार पर एक ऐप पर काम कर रहा हूं, कस्टम अलर्ट के साथ पॉप अप करता हूं। मैंने ब्रॉडकास्ट रिसीवर के साथ खूबसूरती से काम किया है, हालांकि यदि उपयोगकर्ता ने onReceive()
को स्थापित किया है तो विधि को कभी भी मेरे ऐप तक पहुंचने से पहले गोम्स के रूप में कभी भी कॉल नहीं किया जाता है।
इस के आसपास जाने के लिए, मैं content://sms/
पर एक सामग्री पर्यवेक्षक की कोशिश कर रहा हूं, यह ठीक काम कर रहा है, हालांकि onChange()
को दो बार कहा जाता है, ठीक उसी पैरामीटर के साथ। मैंने टाइम टिकटें जांचने की कोशिश की, लेकिन वे वही हैं, जैसा कि मैंने टाइप किया है और हर दूसरे पैरामीटर को सेट किया है।
जो मैंने देखा है, यह एक आम मुद्दा है, लेकिन ऐसा नहीं है जिसे मैंने कहीं भी देखा है।
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
querySMS();
}
protected void querySMS() {
Cursor cur = getContentResolver().query(u, null, null, null, null);
cur.moveToNext(); // this will make it point to the first record, which is the last SMS sent
String type = cur.getString(cur.getColumnIndex("type"));
String body = cur.getString(cur.getColumnIndex("body")); //content of sms
String add = cur.getString(cur.getColumnIndex("address")); //phone num
if (type.equals("1")) {
if (add.equals(Test.SENDER)) {
String[] bodys = body.split(" ", 7);
if (bodys[0].equals("test")) {
test = true;
}
cat = bodys[1];
level = bodys[2];
urgency = bodys[3];
certainty = bodys[4];
carrier = bodys[5];
message = bodys[6];
final Intent intent = new Intent(context, AlertActivity.class);
Bundle b = new Bundle();
b.putString("title", cat);
b.putString("certainty", certainty);
b.putString("urgency", urgency);
b.putString("level", level);
b.putString("message", message);
b.putBoolean("test", test);
intent.putExtras(b);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
carrierName = manager.getNetworkOperatorName();
if (carrierName.replaceAll(" ", "").equals(carrier)) {
context.startActivity(intent);
} else {
//testing
Toast.makeText(context, carrierName.replaceAll(" ", ""), Toast.LENGTH_LONG).show();
}
}
}
}
onChange()
की वजह से
दो बार इम दो अलर्ट हो रही साथ ही निकाल दिया जा रहा है। मैं अपने जीवन के लिए इस के आसपास एक रास्ता नहीं समझ सकता।
अन्य (अपूर्ण) उत्तरों के लिंक उपयोगी होंगे – KevinDTimm