Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何通过切换按钮调用SMSReceiver类_Android_Android Intent_Sms_Broadcastreceiver - Fatal编程技术网

Android 如何通过切换按钮调用SMSReceiver类

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

我正在寻找一个应用程序,拦截短信给定的某些参数。到目前为止,我已经注册了一个切换按钮以及SMSReceiver类,但是我无法找到一种方法,仅在启用切换时让SMSReceiver工作,在禁用切换时让SMSReceiver停止工作

Main.Java

公共类主要扩展活动{

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和我的项目哈哈!