android之IntentFilter的用法_Intent.ACTION_TIME_TICK在manifest.xml不起作用

在模仿一个天气预报的widget时候,用到了IntentFilter,感觉在manifest.xml注册的receiver跟用代码写registerReceiver()的效果应该是相同的,于是想证明一下,就写了如下一段程序:MainActivity:public class MainActivity extends Activity { public static final i

大家好,又见面了,我是全栈君。

在模仿一个天气预报的widget时候,用到了IntentFilter,感觉在manifest.xml注册的receiver跟用代码写registerReceiver()的效果应该是相同的,于是想证明一下,就写了如下一段程序:

MainActivity:

public class MainActivity extends Activity {
	
	public static final int UPDATE = 000;
	TextView xml;
	TextView java;
	int count = 0;
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch (msg.what) {
			case UPDATE:
				count ++;
				xml.setText(count);
				break;

			default:
				break;
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		IntentFilter javaFilter = new IntentFilter();
		javaFilter.addAction("android.intent.action.TIME_TICK");
		registerReceiver(receiver, javaFilter);
		xml = (TextView) findViewById(R.id.xml);
		java = (TextView) findViewById(R.id.java);
	}
	
	BroadcastReceiver receiver = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			Date date = new Date();
			SimpleDateFormat dateFormat = new SimpleDateFormat("HHmm");
			java.setText(dateFormat.format(date));
		}
	};
	
	protected void onDestroy() {
		unregisterReceiver(receiver);
	};
	
	class Accept extends BroadcastReceiver {

		@Override
		public void onReceive(Context arg0, Intent arg1) {
			// TODO Auto-generated method stub
			Message message = handler.obtainMessage();
			message.what = UPDATE;
			handler.sendMessage(message);
		}

	}
}

在manifest文件中注册如下:

<receiver android:name="jason.recevertext.Accept">
            <intent-filter >
                <action android:name="android.intent.action.TIME_TICK"/>
            </intent-filter>
        </receiver>

布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/xml"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <TextView
        android:id="@+id/java"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</LinearLayout>

总体说来很简单,就是通过两种方式注册了IntentFilter,然后接收到更新的intent之后更新主界面上的两个textview

结果java代码注册的IntentFilter很正常,xml注册的IntentFilter没有任何作用.

事实证明我的想法是错的,经过查询资料,发现:

在众多的Intent的action动作中,Intent.ACTION_TIME_TICK是比较特殊的一个,根据SDK描述:

Broadcast Action: The current time has changed. Sent every minute. You can not receive this through components declared in manifests, only by exlicitly registering for it withContext.registerReceiver()

意思是说这个广播动作是以每分钟一次的形式发送。但你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。

 

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539/article/details/10815787(转载请说明出处)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121401.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)

    FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24…)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法。swscale主要用于在2个AVFrame之间进行转换。下面来看一个视频解码的简单例子,这个程序完成了对”北京移动开发者大会茶歇视频2.flv”(其实就是优酷上的一个普通视频)的解码工作,并将解码后的数据保存为原始数据文件(例如YUV420,YUV422,RGB24等等)。其中略去了很多的代码。注:完整代码在文章:100

    2022年7月16日
    41
  • 最新版redis的安装及配置 linux系统

    最新版redis的安装及配置 linux系统

    2021年10月10日
    53
  • 什么是系统平均负载(Load average)

    什么是系统平均负载(Load average)一、什么是系统平均负载(Loadaverage)?在Linux系统中,uptime、w、top等命令都会有系统平均负载loadaverage的输出,那么什么是系统平均负载呢?LoadAver

    2022年7月3日
    22
  • log4j自定义layout_log4j使用教程

    log4j自定义layout_log4j使用教程如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:   %m输出代码中指定的消息    %p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL    %r输出自应用启动到输出该log信息耗费的毫秒数    %c输出所属的类目,通常就是所在类的全名    %t输出产生该日志事件的线

    2022年8月22日
    13
  • java解析xml转为Map

    java解析xml转为Map之前开发过一个解析多层级xml文件的工具类,后来处理的时候发现,这种方式得到的map或json集合多一个key标签,在解析的时候会比较麻烦,于是根据需要在原有方法的基础上写出了另外的处理方法,总结记录如下:1、单节点单层级、单节点多层级xml转mapimportjava.io.ByteArrayInputStream;importjava.util.ArrayList;importjava

    2022年5月30日
    43
  • 驱动程序vmci.sys版本不正确。请尝试重新安装 VMware

    驱动程序vmci.sys版本不正确。请尝试重新安装 VMware

    2022年2月22日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号