说点零零碎碎便于之后参考: java
if (somethingWeird && itDontLookGood) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:555-2368”)); startActivity(intent); }
if (somethingWeird && itDontLookGood) { // Create the impliciy Intent to use to start a new Activity. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:555-2368”)); // 检查是否存在能执行该action的activity PackageManager pm = getPackageManager(); ComponentName cn = intent.resolveActivity(pm); //若是没有,那么就去Google Play去找找看 if (cn == null) { Uri marketUri = Uri.parse(“market://search?q=pname:com.myapp.packagename”); //指定app的包名 Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri); //若是Google Play上有,那么就去下载一个APP来。 if (marketIntent.resolveActivity(pm) != null) startActivity(marketIntent); else //注意:不是每台设备都装了Google Play Store Log.d(TAG, “Market client not available.”); } else startActivity(intent); }
private static final int PICK_CONTACT_SUBACTIVITY = 2; private void startSubActivityImplicitly() { Uri uri = Uri.parse(“content://contacts/people”); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY); }
这里演示的是去取一个联系人的信息。 android
当子activity finish掉以前,只要setResult(int resultCode)或者setResult(int resultCode,Intent data)把数据放进去,这个方法的intent主要仍是来放数据的(一般就是个URI,再多一点就是额外的extra键值对,bundle之类的,不解释了)。 web
一般来讲resultCode无外乎2种,要么是Activity.RESULT_OK或者就是Activity.RESULT_CANCELED, 固然你若是要求比较严格的描述,那你能够本身定义个整形常量就能够了,既然有结果码,对应必然从父activity传来的请求码。。不解释了 正则表达式
setResult(RESULT_CANCELED); //位置在finish以前。
finish(); 浏览器
那么父activity是如何接受到,子activity所返回的数据? app
只须要重写onAcitivtyResult方法。(参数不解释了,太直观了) ide
ACTION_ALL_APPS:打开一个acitivty,列出全部app。 这个一般也就laucher对它有兴趣了。 函数
ACTION_ANSWER: 打开一个用来接受电话的activity. 工具
ACTION_BUG_REPORT: 打开一个用来发布BUG的activity. 测试
ACTION_CALL: 打电话的,不过这个根据你提供的号码,初始化打电话界面,可是不拔出!
ACTION_DIAL: 直接就拨出了。电话的URI写法不一:好比tel:555-1234或者tel:(212)555 212也是容许的。其它的不解释了。
ACTION_CALL_BUTTON: 这个就是那个刚刚初始化的打电话界面。
ACTION_DELETE: 顾名思义,根据提供的URI删除数据。
ACTION_EDIT: 提供一个能根据指定数据URI显示一个可编辑的界面。
ACTION_INSERT: 用来插入数据。
ACTION_PICK: 根据指定的数据URI,去获取一个联系人信息从Content Provider。 当被关闭,应该返回一个当前被选中的联系人的URI,好比URI:content://contacts/people将会调用原生的联系人列表。
ACTION_SEARCH: 启动一个查找指定东西的Activity. 具体。。。先不说了,用到百度吧。
ACTION_SEARCH_LONG_PRESS: 这个典型的用在快捷的发音查找。
ACITON_SENDTO : 根据指定的联系人发送数据。
ACTION_SEND: 用来给远程的接受者发送数据。
ACTION_VIEW: 这个最最经常使用的action。 根据提供的数据URI显示各类合理的视图。主要看URI的模式是什么。好比http:的地址将会打开在浏览器,tel开头就是打电话的界面了,
geo:开头的显示指定位置在GoogleMap上,若是是联系人的content,那么显示联系人管理。
ACTION_WEB_SERACH 打开一个浏览器用于查询,基于使用的SearchManager.QUERY键。
还有些关于广播的ACTION,之后再说。
Linkify 是一个工具类,用来帮助建立TextView或者TextView的子类的超连接,经过正则表达式的匹配。
里面含的文本若是匹配指定的正则表达式,那么这文本将会被转化为可点击的超连接(点击超连接默认隐式调用startActivity(new Intent(Intent.ACITION_VIEW,uri)))。超连接的文本就是对应的uri。
你能够指定任何自定义的正则表达式被视为可点击的连接;为了方便,Linkify类预设了常见的内容类型。
原生的Linkify连接类型
Linkify预设的类型有web URLs,email地址,电话号码。 去应用一个预设类型,可使用静态的Linkify.addLinks方法,参数中传递一个须要被应用的View和描述类型的位掩码常量.
如:WEB_URLS,EMAIL_ADDRESS,PHONE_NUMBERS和ALL。
例子:
TextView textView = (TextView)findViewById(R.id.myTextView);
Linkify.addLinks(textView,Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES);
你也能够在XML中添加:
<TextView
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:text=”@string/linkify_me”
android:autoLink=”phone|email” //可选值有none,web,email,phone,all
/>
Tip:从上面咱们已经明白,Linkify所作的本质工做:找到匹配所指定的(预设的也好,自定义的也好)正则表达式,而后这段字符串自动变为可点击的超连接。
有时候,你想连接你本身的数据,那么你就须要去自定义linkify的表达式了。
例子:
这代码的大体思路是:构建基础Uri,先测试是否找获得Action为ACTION_VIEW和指定的Uri的activity,若是找不到,那么后面的工做就不须要作了,若是找到了,那么为myTextView添加这种超连接规则。
// 定义基础Uri
String baseUri = “content://com.paad.earthquake/earthquakes/”;
//接着就开始测试了。
PackageManager pm = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(baseUri));
boolean activityExists = testIntent.resolveActivity(pm) != null;
//若是存在的话,那么添加匹配模式并将textView拉进去折腾。
if (activityExists) {
int flags = Pattern.CASE_INSENSITIVE;
Pattern p = Pattern.compile(“\\bquake[\\s]?[0-9]+\\b”, flags); //quake开头加上一串数字和可选的空格
Linkify.addLinks(myTextView, p, baseUri); 这个是Linkify.addLinks的另一个重载函数
}
可是只是简单这么作了可能会出问题,可能你须要处理下空格或者处理下字符之类须要处理的,否则生成的uri多是非法的,这是Linkify.addLinks的另外个重载函数,多了2个参数
matchFilter, transformFilter,前者用来继续过滤,后者用来处理当前字符串以符合自个儿要求的字符串,最后再附加到baseUri上成为一个完整的uri.
DEMO:
class MyMatchFilter implements MatchFilter { public boolean acceptMatch(CharSequence s, int start, int end) { return (start == 0 || s.charAt(start-1) != ‘!’); } } class MyTransformFilter implements TransformFilter { public String transformUrl(Matcher match, String url) { return url.toLowerCase().replace(“ “, “”); } }