Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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 如何让意图活在背景中_Android_Android Intent_Intentfilter - Fatal编程技术网

Android 如何让意图活在背景中

Android 如何让意图活在背景中,android,android-intent,intentfilter,Android,Android Intent,Intentfilter,这个问题可能看起来很模糊,因为Intent几乎都是生活在后台。我同意这一点,但我使用的是Intent程序化过滤器。我设置了两个按钮,注册和取消注册。当按下register时,Intentfilter被注册,其作用与unregister相同。现在,当我按下“注册”按钮并将应用程序放在后台时,将不会显示toast消息。但是我希望Intent过滤器仅在用户明确按下unregister按钮时停止接收消息 我正在使用此代码: public class MainActivity extends Activi

这个问题可能看起来很模糊,因为
Intent
几乎都是生活在后台。我同意这一点,但我使用的是
Intent
程序化过滤器。我设置了两个按钮,注册和取消注册。当按下register时,
Intent
filter被注册,其作用与unregister相同。现在,当我按下“注册”按钮并将应用程序放在后台时,将不会显示toast消息。但是我希望
Intent
过滤器仅在用户明确按下unregister按钮时停止接收消息

我正在使用此代码:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

 private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    // Get the object of SmsManager
        final SmsManager sms = SmsManager.getDefault();

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub


            // Retrieves a map of extended data from the intent.
            final Bundle bundle = intent.getExtras();

            try {

                if (bundle != null) {

                    final Object[] pdusObj = (Object[]) bundle.get("pdus");

                    for (int i = 0; i < pdusObj.length; i++) {

                        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                        String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                        String senderNum = phoneNumber;
                        String message = currentMessage.getDisplayMessageBody();

                        Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);


                       // Show alert
                        int duration = Toast.LENGTH_LONG;
                        Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration);
                        toast.show();







                    } // end for loop
                  } // bundle is null

            } catch (Exception e) {
                Log.e("SmsReceiver", "Exception smsReceiver" +e);

            }




        }

    };



public void register(View view){

    this.registerReceiver(broadcastReceiver, new IntentFilter(
            "android.provider.Telephony.SMS_RECEIVED"));

}
public void unRegister(View view){

    this.unregisterReceiver(broadcastReceiver);


}



}
公共类MainActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private BroadcastReceiver BroadcastReceiver=新的BroadcastReceiver(){
//获取SmsManager的对象
final smsmsmanager sms=smsmsmanager.getDefault();
@凌驾
公共void onReceive(上下文、意图){
//TODO自动生成的方法存根
//从意图检索扩展数据的映射。
final Bundle=intent.getExtras();
试一试{
if(bundle!=null){
最终对象[]pdusObj=(对象[])bundle.get(“pdus”);
对于(int i=0;i
如中所述,通过
活动编程注册的广播接收器。registerReceiver()
在活动未运行时不会接收任何广播:

如果在Activity.onResume()实现中注册接收者,则应在Activity.onPause()中注销该接收者。(暂停时不会收到意图,这将减少不必要的系统开销)

你可以考虑使用背景<代码>服务<代码>,并在上面登记你的广播接收器(参见)。


或者,正如@doctoror drive所指出的,您可以在清单文件中静态注册接收方,并使用
PackageManager

以编程方式启用/禁用它。你不需要任何服务。相反,我们必须在清单中注册一个静态接收者。@doctordrive:问题是我在回避static@VamsiPavanMahesh你在避免静态什么?静态接收器..因为它会调用应用程序always@VamsiPavanMahesh如果你需要一个接收器来调用你的应用程序,它需要是静态的。如果你只需要静态接收器一段时间,你可以取消注册,这似乎是公平的。。我必须检查一下..谢谢@MikeM.@MikeM:以你的方式实现。。没问题。。谢谢