Intent和Broadcast Receiver

Intent简介

Intent是一种消息传递机制,可以在应用程序中使用, 也可以在应用程序间使用。Intent可以用于:

  • 使用类名显示启动一个特定的Service或Activity
  • 启动Activity或Service来执行一个动作的Intent,通常需要使用特定的数据,或者对特定的数据执行动作。
  • 广播某个事件的发生。

使用Intent来启动Activity

显示:

1
2
Intent intent = new Intent(MyActivity.this, MyOtherActivity.class);
startActivity(intent);

隐式:
隐式的Intent提供了一种机制,可以让匿名的应用程序组件响应动作请求。这意味着可以要求系统启动一个可执行给定动作的Activity,而不必知道需要启动哪个应用程序或Activity。

例如:如果希望用户从应用程序中打电话,可以实现一个新的拨号程序,也可以使用一个隐式的Intent来请求一个在电话号码(表示为一个URI)上执行动作(拨号)。

1
2
3
4
5
if(somethingWeird&&itDontLookGood){
Intent intent =
new Intent (Intent.Action_DLL,Uri.parse("tel:555-2368"));
startActivity(intent);
}

Android就会解析这个Intent,并启动一个新的Activity,该Activity会提供对这个电话号码进行拨号的动作—-在这种情况下,通常是Phone Dialer.

Linfify简介

Linkify是一个辅助类,它会自动地在TextView类(或者TextView的派生类)中通过RegEx模型匹配来创建超链接。

那些匹配一个指定的RegEx模式的文本都将会被转换为一个可以单击的超链接,这些超链接可以隐式使用匹配的文本作为目标URI来触发startActivity(new Intent(Intent.ACTION_VIEW,uri))。

原生Linkify链接类型

Linkify类有一些预设值可以检测到Web URL,电子邮件地址和电话号码,并把他们转换为链接。要应用一个预设值,需要使用静态的Linkify.addLinks方法,并传入要建立的链接的视图,以及以下的一个活更多个自描述的Linkify类常量的位掩码:WEB_URLS,EMAIL_ADDRESS,PHONE_NUMBERS和ALL。

1
2
TextView textView = (TextView)findViewById(R.id.myTextView);
Linkify.addLinks(textView,Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES);

也可以使用Android:autoLink属性来在一个布局内部链接视图。

1
2
3
4
5
6
<TextView 
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:text = "@string/linkify_name"
android:autoLink = "phone|email"
/>

创建定制的链接字符串

使用Match Filter

使用Transform Filter

Transform Filter 允许修改匹配的链接文本生成的隐式URI。把链接文本和目标URI分离开,你能够更自由的决定如何把数据字符串显示给用户。

使用Intent广播事件

作为一个系统级的消息传递机制,Intent可以在进程之间发送结构化的消息。因此,可以通过实现Broadcast Receiver来监听和响应应用程序内的这些Broadcast Intent。

Broadcast Intent 用于向监听器通知系统的应用程序或应用事件,从而可以扩展应用程序间的事件驱动的编程模型。

Broadcast Intent 可以是应用程序更加开发:通过使用Intent来广播一个事件,可以在不用修改原始应用程序的情况下,让你和第三方开发人员对事件做出反应。在应用程序中,可以通过监听Broadcast Intent来对设备状态变化和第三方应用程序事件做出反应。

使用 Intent广播事件

在应用程序组件中,可以构建希望广播的Intent,然后使用sendBroadcast方法来发送它。

可以对Intent的动作,数据和分类进行设置,从而使Broadcast Receiver能够精确的确定他们的需求。

使用Broadcast Receiver来监听广播

Broadcast Receiver可以用来监听Broadcast Intent。要使Broadcast Receiver 能够接受广播,就需要对其进行注册,即可以使用代码,也可以在应用程序的manifest文件中注册。无论怎么注册,都要使用一个Intent Filter来指定它要监听哪些Intent和数据。