2013年12月21日星期六

系统中没有邮件客户端设置autoLink=email会挂掉的问题 - AngelDevil

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
系统中没有邮件客户端设置autoLink=email会挂掉的问题 - AngelDevil  阅读原文»

  TextView的autoLink属性为我们提供了很大的便利性,当文本中有网址,邮箱或电话的时候可以让我们方便地执行打电话发邮件等动作,不过也有一些问题,比如说设置autoLink包含email属性,当文本中有邮件地址时只要点击就可以调用邮件客户端来发邮件,但是如果当前系统中没有邮件客户端可供调用,程序会直接挂掉。

  通过看Log可以发现,系统抛出了ActivityNotFoundException异常,并且Exception的getMessage中包含"mailto:xxxx@xxx.xxx"字样,当时第一反应是设置Thread.uncaughtExceptionHandler,判断如果异常的类型是ActivityNotFoundException并且Error Message中有"mailto"字样直接让uncaughtException函数返回,试了一下,程序确实没挂掉,窃喜中,但是接下来点击了一下屏幕,5秒钟后ANR了,好吧这个方法不行。

  又想到当点击链接后会调用邮件客户端发邮件,肯定有startActivity的调用,于是重载Activity的startActivity函数,把参数 intent的内容打出来(直接toString()就行了),发现在Intent的内容是ACTIVION_VIEW,并有extra data:mailto:xxxx@xxx.xxx,所以就通过intent包含的信息判断如果包含mailto字样就认为是系统调用邮件客户端发邮件,此时判断系统中是否有邮件客户端可处理这个请求,如果没有就把这个startActivity事件拦截下来。

@Override
public void startActivity(Intent intent) {
if (intent.toString().indexOf("mailto") != -1) { // Any way to judge that this is to sead an email
PackageManager pm = getPackageManager();
// The first Method
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
if (activities == null || activities.size() == 0) {
// Do anything you like, or just return
return;
}

// Another method
// ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);
// if (resolveInfo == null)

// Yet another metod
// Intent.createChooser(intent, "Choose email client");
}
super.startActivity(intent);
}

  代码就是上面这样,很简单,提到了三种方法,第一种和第二种都是通过PackageManager判断是否有可以处理这个Intent的请求的组件,如果没有就直接让startActivity返回,在返回之前你想干嘛干嘛,第三种方法是通过 Intent.createChoose手动弹出一个选择器,这个方法记得以前用是不行的,这次试了下竟然可以,难道是我记错了?反正用前两种方法就好了。

  不只是邮件,如果你想通过以下代码跳转到应用市场让用户为你的应用评分

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(
"market://details?id=" + getPackageName()));
startActivity(intent);

  如果用户系统中没有安装任何应用市场,很不幸,你的程序一样会挂掉,和前面说的email一样的问题:ActivityNotFoundException,不知道Google为什么不处理一下,也许人家以为手机上怎么可能没有邮件客户端和应用市场,不了解中国国情啊,不知道如果没有电话应用会是什么样?没有应用市场的处理是一样的方法,重载startActivity,只要你能判断这个请求是跳往市场的就行了。


本文链接:http://www.cnblogs.com/angeldevil/p/3485871.html,转载请注明。

由一条普通的link引用引发的无数问号,大家能回答的帮忙回答回答吧. - 思思博士  阅读原文»

<link type="text/css" rel="stylesheet" href="1.css" />

  对于前台工作者来说,这句话应该很常见了吧.可是对于一位闲着蛋疼的IT工作者来说,总要抓耳挠腮的问一句为什么呢?

现在就让洒家开始发问,希望各位看官给予回答(^_^).

1:type="text/css"是什么意思,这个东西是干嘛的.在网上查了一下,再多方比较,加上自己的理解.给出答案.

type="text/css"是指定MIME类型,其中:text是指对象为网页中的文本,css或是javascript是指当前指定的文本类型
这句话是告诉服务器我现在想要的文件是什么MIME类型的.服务器上有一个包含MIME类型和文件扩展名映射的转化表.服务器会根据这张表来自动选择一个适当的MIME类型并将其包含到HTTP中,返回到客户端.(感觉像是知道了,可是好像什么都不知道的那种感觉.)

完蛋了,越解释越糊涂了,MIME类型又是什么东西.在网上查了一下,再多方比较,加上自己的理解.给出答案:还是不能明白什么叫做MIME类型,干嘛的?一头雾水.咪咪倒是是听说过.2.rel="stylesheet" 在网上查了一下,再多方比较,加上自己的理解.给出答案:rel是英文单词:"relation"的缩写,说明本页面和链接到的页面的之间的关系。那么stylesheet到底代表什么关系呢?是好基友还是小三,还是原配呢?接着找答案.


原来rel是用来表示需要链接的是一个样式表.
rel还有很多个值,我实在是不知道干嘛用的了现在就列举出来,广大IT工作者么来自己跟帖给出答案吧.
alternate,alternate stylesheet,chapter............太多了,不写了,感兴趣的自己跟帖写吧.
在搜索的过程中有看到了很多新的属性.在网上查了一下,再多方比较,加上自己的理解.给出答案.
media,
screen:表示在改样式表的样式是要用于显示器上的.
  print:表示在打印的时候显示的样式.
projection:投影机.
aural:扬声器
braille:提交到凸字触觉感知设备.
tty:电传打字机 (使用固定的字体).
tv:电视机.
a
ll:所有输出设备.时间有限,后期在一点一点的补上去吧.



本文链接:http://www.cnblogs.com/guoyansi19900907/p/3485862.html,转载请注明。

阅读更多内容

没有评论:

发表评论