Saya menghapus SMS dari kotak masuk tetapi saya ingin tahu: Bagaimana cara menghapusnya sebelum masuk ke kotak masuk?
Saya menghapus SMS dari kotak masuk tetapi saya ingin tahu: Bagaimana cara menghapusnya sebelum masuk ke kotak masuk?
Jawaban:
Iya.
Terlepas dari beberapa reaksi negatif terhadap pertanyaan ini, ada penggunaan yang sah untuk intersepsi SMS. Misalnya: mengotomatiskan verifikasi nomor telepon, layanan yang disediakan melalui SMS (meskipun umumnya hal ini harus dilakukan dengan SMS data), atau untuk aplikasi yang meningkatkan pengalaman pengguna dengan memproses pesan yang diformat khusus untuk ditampilkan di Android yang bagus UI -specific.
Mulai Android 1.6, siaran pesan SMS yang masuk ( android.provider.Telephony.SMS_RECEIVED
) dikirim sebagai " siaran yang dipesan " - artinya Anda dapat memberi tahu sistem komponen mana yang harus menerima siaran terlebih dahulu.
Jika Anda menentukan android:priority
atribut pada mendengarkan SMS <intent-filter>
, Anda akan menerima pemberitahuan sebelum aplikasi SMS asli.
Pada tahap ini, Anda dapat membatalkan siaran, mencegahnya disebarkan ke aplikasi lain.
Pembaruan (Oktober 2013): Saat Android 4.4 tiba, itu akan membuat perubahan pada API SMS yang dapat memengaruhi kemampuan aplikasi untuk memengaruhi pengiriman SMS.
Lihat entri blog Pengembang Android ini untuk info lebih lanjut:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
, jadi itu mungkin. Faktanya, Handcent menggunakan prioritas 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."
.
Langkah-1: Buat penerima siaran khusus Anda untuk menerima sms. tulis logika untuk membatalkan luas sehingga pesan tidak akan tersedia di kotak masuk Anda
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
Langkah-2 Daftarkan penerima siaran di AndoridManifest dan masukkan android: nilai prioritas dengan angka yang besar
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Itu dia
Bagaimana cara kerja kode di atas
Karena menerima siaran SMS adalah siaran yang dipesan, penerima dengan prioritas tinggi akan menerima terlebih dahulu sehingga aplikasi Anda menerima terlebih dahulu dan setelah menerima Anda membatalkan siaran. Jadi tidak ada aplikasi lain yang bisa menerimanya. Karenanya sms tidak akan ada di inbox
Solusi di bawah ini ("android: priority" dan abortBroadcast ()) berfungsi selama aplikasi Perpesanan Android sebagai default (maksud saya aplikasi perpesanan Android stok). Jika pengguna menginstal "GoSMSPro" atau "HandcentSMS", aplikasi ini masih menampilkan pesan di kotak masuk, saya yakin ini karena "android: priority". Saya tidak melihat cara yang lebih baik untuk memperbaiki masalah di atas, jika aplikasi perpesanan pihak ketiga diinstal di telepon.
/**
* 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);
}
}
Periksa prioritas dan tetapkan prioritas yang lebih tinggi (dalam manifes Anda) daripada penerima lainnya.
Jika Anda memiliki skenario seperti ini dan Anda ingin menghapus atau mengabaikan pesan yang terkait dengan nomor kontak ini "+ 44xxxxx" dll, maka gunakan kode ini di penerima Siaran SMS
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
Anda juga harus menetapkannya sebagai prioritas tinggi.