ฉันกำลังลบ SMS ออกจากกล่องจดหมาย แต่ฉันต้องการทราบ: ฉันจะลบมันก่อนที่จะถึงกล่องจดหมายได้อย่างไร?
ฉันกำลังลบ SMS ออกจากกล่องจดหมาย แต่ฉันต้องการทราบ: ฉันจะลบมันก่อนที่จะถึงกล่องจดหมายได้อย่างไร?
คำตอบ:
ใช่.
แม้จะมีปฏิกิริยาเชิงลบต่อคำถามนี้ แต่ก็มีการใช้การสกัดกั้น SMS อย่างถูกต้อง ตัวอย่างเช่น: การยืนยันหมายเลขโทรศัพท์โดยอัตโนมัติบริการที่จัดเตรียมผ่าน SMS (แม้ว่าโดยทั่วไปแล้วควรทำด้วย SMS ข้อมูล) หรือสำหรับแอปพลิเคชันที่ปรับปรุงประสบการณ์ของผู้ใช้โดยการประมวลผลข้อความที่จัดรูปแบบพิเศษเพื่อแสดงใน Android ที่ดี UI เฉพาะ
สำหรับ Android 1.6 การส่งข้อความ SMS ขาเข้า ( android.provider.Telephony.SMS_RECEIVED
) จะถูกส่งเป็น "การออกอากาศตามสั่ง " ซึ่งหมายความว่าคุณสามารถบอกระบบได้ว่าส่วนประกอบใดควรได้รับการออกอากาศก่อน
หากคุณกำหนดandroid:priority
แอตทริบิวต์ในการฟัง SMS ของ<intent-filter>
คุณคุณจะได้รับการแจ้งเตือนก่อนแอปพลิเคชัน SMS ดั้งเดิม
ณ จุดนี้คุณสามารถยกเลิกการออกอากาศเพื่อป้องกันไม่ให้แพร่กระจายไปยังแอปอื่น ๆ
อัปเดต (ตุลาคม 2013):เมื่อมาถึง Android 4.4 จะมีการเปลี่ยนแปลง SMS API ซึ่งอาจส่งผลต่อความสามารถของแอปในการส่งผลกระทบต่อการส่ง SMS
ดูบล็อกโพสต์ของนักพัฒนา Android สำหรับข้อมูลเพิ่มเติม:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
ดังนั้นจึงเป็นไปได้ ในความเป็นจริง Handcent 2147483647
ใช้จัดลำดับความสำคัญ
"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
มีมันบอกว่า
ขั้นตอนที่ 1:สร้างเครื่องรับสัญญาณออกอากาศแบบกำหนดเองเพื่อรับ SMS เขียนตรรกะเพื่อยกเลิกแบบกว้างเพื่อที่ข้อความจะไม่พร้อมใช้งานในกล่องจดหมายของคุณ
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
ขั้นตอนที่ 2ลงทะเบียนเครื่องรับสัญญาณออกอากาศใน AndoridManifest และใส่ android: ค่าลำดับความสำคัญเป็นจำนวนมาก
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
แค่นั้นแหละ
โค้ดข้างต้นทำงานอย่างไร
เนื่องจาก SMS ที่ได้รับการส่งแบบกว้างเป็นการออกอากาศตามคำสั่งเครื่องรับที่มีลำดับความสำคัญสูงจะได้รับก่อนดังนั้นแอปพลิเคชันของคุณจะได้รับก่อนและหลังจากได้รับคุณจึงยกเลิกการออกอากาศ ดังนั้นจึงไม่มีแอปพลิเคชันอื่นใดสามารถรับได้ ดังนั้น SMS จะไม่มีอยู่ในกล่องจดหมาย
โซลูชันด้านล่าง ("android: priority" และ abortBroadcast ()) ใช้งานได้ตราบเท่าที่แอปพลิเคชันการส่งข้อความ Android เป็นค่าเริ่มต้น (ฉันหมายถึงแอปพลิเคชันการส่งข้อความ Android) หากผู้ใช้ติดตั้ง "GoSMSPro" หรือ "HandcentSMS" แอปพลิเคชันเหล่านี้ยังคงแสดงข้อความในกล่องจดหมายฉันเชื่อว่านี่เป็นเพราะ "android: priority" ฉันไม่เห็นวิธีที่ดีกว่าในการแก้ไขปัญหาข้างต้นหากติดตั้งแอปพลิเคชันการส่งข้อความของบุคคลที่สามในโทรศัพท์
/**
* Check priority
* @param activity
*/
public static void receiverPriority(Activity activity){
Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
List<ResolveInfo> infos = activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0);
for (ResolveInfo info : infos) {
System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
}
}
ตรวจสอบลำดับความสำคัญและกำหนดลำดับความสำคัญสูงกว่า (ในรายการของคุณ) มากกว่าเครื่องรับอื่น ๆ
หากคุณมีสถานการณ์เช่นนี้และต้องการลบหรือเพิกเฉยต่อข้อความที่เกี่ยวข้องกับหมายเลขติดต่อ "+ 44xxxxx" เป็นต้นให้ใช้รหัสนี้ในเครื่องรับ SMS Broadcast
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
คุณต้องตั้งค่าลำดับความสำคัญสูงด้วย