Android 如何通过切换按钮调用SMSReceiver类
我正在寻找一个应用程序,拦截短信给定的某些参数。到目前为止,我已经注册了一个切换按钮以及SMSReceiver类,但是我无法找到一种方法,仅在启用切换时让SMSReceiver工作,在禁用切换时让SMSReceiver停止工作 Main.Java 公共类主要扩展活动{Android 如何通过切换按钮调用SMSReceiver类,android,android-intent,sms,broadcastreceiver,Android,Android Intent,Sms,Broadcastreceiver,我正在寻找一个应用程序,拦截短信给定的某些参数。到目前为止,我已经注册了一个切换按钮以及SMSReceiver类,但是我无法找到一种方法,仅在启用切换时让SMSReceiver工作,在禁用切换时让SMSReceiver停止工作 Main.Java 公共类主要扩展活动{ Intent in = new Intent(); IntentFilter intentFilter; String drivingMessage; String originAddress; @Override protec
Intent in = new Intent();
IntentFilter intentFilter;
String drivingMessage;
String originAddress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");
}
BroadcastReceiver intentReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent){
originAddress = intent.getExtras().getString("sms");
Toast.makeText(context, originAddress, Toast.LENGTH_LONG).show();
}
};
@Override
protected void onResume(){
registerReceiver(intentReceiver, intentFilter);
super.onResume();
}
@Override
protected void onPause(){
unregisterReceiver(intentReceiver);
super.onPause();
}
public void serviceEnabled(View view){
ToggleButton tB = (ToggleButton) findViewById(R.id.serviceToggle);
boolean on = tB.isChecked();
if(on){
Toast.makeText(this, " toggle is on ", Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(this, " toggle is off " , Toast.LENGTH_SHORT).show();
}
}
}
Java
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
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();
}
}
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
this.abortBroadcast();
}
}
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context)
boolean isServiceOn=preferences.getBoolean("is_sms_on",true);
if(isServiceOn){
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();
}
}
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
this.abortBroadcast();
}
}
}
公共类SMSReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
String str=“SMS From”;
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i请在未选中切换按钮时尝试注销接收器
public void serviceEnabled(View view){
ToggleButton tB = (ToggleButton) findViewById(R.id.serviceToggle);
boolean on = tB.isChecked();
if(on){
//your code
} else{
unregisterReceiver(intentReceiver);
}
}
如果未选中“切换”按钮,则尝试直接从清单禁用接收器,这样接收器根本不在图片中。请在启用服务功能的“其他”部分中使用此选项
PackageManager pm=getPackageManager();
ComponentName componentName=new ComponentName(getApplicationContext(),yourreceiver.class);//where yourreceiver is the name of your receiver class
pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);
由于切换按钮是一种用户首选项/设置,您可以将状态保存为SharedReferences中的布尔标志。
然后在SMSReceiver中,在处理传入消息之前,您可以检查SharedReferences中的状态标志并相应地继续
public void serviceEnabled(View view){
ToggleButton tB = (ToggleButton) findViewById(R.id.serviceToggle);
boolean on = tB.isChecked();
SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(this);
Editor editor=preferences.edit();
editor.putBoolean("is_sms_on", on);
editor.commit();
if(on){
Toast.makeText(this, " toggle is on ", Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(this, " toggle is off " , Toast.LENGTH_SHORT).show();
}
}
Java
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
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();
}
}
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
this.abortBroadcast();
}
}
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context)
boolean isServiceOn=preferences.getBoolean("is_sms_on",true);
if(isServiceOn){
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();
}
}
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
this.abortBroadcast();
}
}
}
公共类SMSReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
SharedReferences首选项=PreferenceManager.GetDefaultSharedReferences(上下文)
boolean-isServiceOn=preferences.getBoolean(“is\u sms\u on”,true);
如果(IServiceon){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
String str=“SMS From”;
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;iI尝试将BroadcastReceiver类与onReceive方法一起插入到Toggle is ON部分,并在Off部分注销它,但什么也没有发生。不知道为什么会这样。谢谢,我将尝试一下。这很有效。我在else语句中保留了注销行。谢谢,您确实保存了me和我的项目哈哈!