阿里云
发表主题 回复主题
  • 411阅读
  • 8回复

【Android开发网上的一些重要知识4。。。。】

级别: 小白
发帖
0
云币
-27

Android 中TextView 添加超链接
分类: Android2012-07-16 22:17 4229人阅读 评论(1) [url=]收藏[/url] 举报

androidlayoutemailhtml电话java

1、 使用android:autoLink="all" 只需在TextView中加入这个属性,而在TextView里面写的文字中包含网址、电话、email的会自动加入连接地址。

如:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/text1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:autoLink="all"

android:text="@string/link_text_auto"

/>

2、 使用<string name=””><a href=””></a></string>标签,建立超链接:

如:

<string name="link_text_manual"><b>text2:</b> This is some other

text, with a <a href="http://www.google.com">link</a> specified

via an <a> tag.  Use a \"tel:\" URL

to <a href="tel:4155551212">dial a phone number</a>.

</string>

别忘了

TextView t2 = (TextView) findViewById(R.id.text2);

t2.setMovementMethod(LinkMovementMethod.getInstance());

3、 在java文件中使用HTML语言:

如:

TextView t3 = (TextView) findViewById(R.id.text3);

t3.setText(Html.fromHtml("<b>text3:</b>Text with a "

+ "<a href=\"http://www.google.com\">link</a> "

+ "created in the Java source code using HTML."));

t3.setMovementMethod(LinkMovementMethod.getInstance());

4、 字符串截取方法

SpannableString ss = new SpannableString("text4: Click here to dial the phone.");


ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.setSpan(

new URLSpan("tel:4155551212"),13, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView t4 = (TextView) findViewById(R.id.text4);

t4.setText(ss);

t4.setMovementMethod(LinkMovementMethod.getInstance());





Android, 开发, 网上, 知识






级别: *
发帖
*
云币
*


Android之EditView 阻止软键盘自动弹出
分类: Android2012-07-16 22:13 2840人阅读 评论(0) [url=]收藏[/url] 举报

android

在AndroidManifest.xml里面


选择那个acitivity, 把他的window soft input mode设置成stateHidden和

adjustUnspecified


Java代码

<activity   

     android:name=".ClientSearchViewActivity"  

     android:label="@string/app_name"   

     android:screenOrientation="portrait"  

     android:windowSoftInputMode="adjustUnspecified|stateHidden"  

     android:configChanges="orientation|keyboardHidden">   

</activity>



级别: *
发帖
*
云币
*


查看可用日志缓冲区

Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期:



  • radio — 查看缓冲区的相关的信息.

  • events — 查看和事件相关的的缓冲区.

  • main — 查看主要的日志缓冲区



-b 选项使用方法:

[adb] logcat [-b <buffer>]

下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息:

adb logcat -b radio
查看stdout 和stderr

在默认状态下,Android系统有stdout 和 stderr (System.out和System.err )输出到/dev/null ,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和优先级 I.来记录日志信息


通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用setprop 命令远程输入日志

$ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start

系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加/data/local.prop 可以使用模拟器/设备上的默认设置



Logcat命令列表Android 中各种权限深入体验及详解
分类: Android2012-07-15 19:27 3217人阅读 评论(0) [url=]收藏[/url] 举报

androidpermissionsinstallersystemserviceinteger
一. 权限(permission)

权限用来描述是否拥有做某件事的权力。Android系统中权限分为普通级别(Normal),危险级别(dangerous),签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同,分别属于不同的级别。

对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限,应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。

系统应用可以使用任何权限。权限的声明者可无条件使用该权限。

目前Android系统定义了许多权限,通过SDK文档用户可以查询到哪些操作需要哪些权限,然后按需申请。

为了执行你自己的权限,你必须首先在你的AndroidManifest.xml中使用一个或多个<permission> 标签声明。例如,一个应用程序想用控制谁能启动一个activities,它可以为声明一个做这个操作的许可,如下:

<manifest xmlns:android="http://schemas。android。com/apk/res/android" package="com.me.app.myapp" > <permission android:name="com.me.app.myapp.permission.DEADLY_ACTIVITY" android:label="@string/permlab_deadlyActivity" android:description="@string/permdesc_deadlyActivity" android【Android开发网上的一些重要知识4。。。。】-android开发知识点ermissionGroup="android.permission-group.COST_MONEY" android【Android开发网上的一些重要知识4。。。。】-android重要知识点rotectionLevel="dangerous" /> </manifest>

二 .使用权限

应用需要的权限应当在users-permission属性中申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。

所以,程序间访问权限大致分为两种:

第一种低级点的(permission的protectlevel属性为normal或者dangerous),其调用者apk只需声明<uses-permission>即可拥有其permission。

第二种高级点的(permission的protectlevel属性为signature或者signatureorsystem),其调用者apk就需要和被调用的apk一样拥有相同的signature。



级别: *
发帖
*
云币
*


在运行logcat的时候在前两列的信息中你就可以看到 logcat 的标签列表和优先级别,它是这样标出的:<priority>/<tag> .


下面是一个logcat输出的例子,它的优先级就似乎I,标签就是ActivityManage:

I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}

为了让日志输出能体现管理的级别,你还可以用过滤器来控制日志输出,过滤器可以帮助你描述系统的标签等级.


过滤器语句按照下面的格式描tag【Android开发网上的一些重要知识4。。。。】-android重要知识点riority ... , tag 表示是标签,priority 是表示标签的报告的最低等级. 从上面的tag的中可以得到日志的优先级. 你可以在过滤器中多次写tag【Android开发网上的一些重要知识4。。。。】-android开发基础知识riority .


这些说明都只到空白结束。下面有一个列子,例子表示支持所有的日志信息,除了那些标签为”ActivityManager”和优先级为”Info”以上的和标签为” MyApp”和优先级为” Debug”以上的。 小等级,优先权报告为tag.

adb logcat ActivityManager:I MyApp【Android开发网上的一些重要知识4。。。。】-android开发知识体系 *:S

上面表达式的最后的元素 *:S ,,是设置所有的标签为”silent”,所有日志只显示有”View” and “MyApp”的,用 *:S 的另一个用处是 能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器也作为一项输出到日志中.


下面的过滤语句指显示优先级为warning或更高的日志信息:

adb logcat *:W

如果你电脑上运行logcat ,相比在远程adbshell端,你还可以为环境变量ANDROID_LOG_TAGS :输入一个参数来设置默认的过滤

export ANDROID_LOG_TAGS="ActivityManager:I MyApp【Android开发网上的一些重要知识4。。。。】-android开发基本知识 *:S"

需要注意的是ANDROID_LOG_TAGS 过滤器如果通过远程shell运行logcat 或用adb shell logcat 来运行模拟器/设备不能输出日志.



控制日志输出格式

日志信息包括了许多元数据域包括标签和优先级。可以修改日志的输出格式,所以可以显示出特定的元数据域。可以通过 -v 选项得到格式化输出日志的相关信息.



  • brief — Display priority/tag and PID of originating process (the default format).

  • process — Display PID only.

  • tag — Display the priority/tag only.

  • thread — Display process:thread and priority/tag only.

  • raw — Display the raw log message, with no other metadata fields.

  • time — Display the date, invocation time, priority/tag, and PID of the originating process.

  • long — Display all metadata fields and separate messages with a blank lines.



当启动了logcat ,你可以通过-v 选项来指定输出格式:

[adb] logcat [-v <format>]

下面是用 thread 来产生的日志格式:

adb logcat -v thread

需要注意的是你只能-v 选项来规定输出格式 option.




级别: *
发帖
*
云币
*


应用程序安装的时候,应用程序请求的permissions是通过package installer来批准获取的。package installer是通过检查该应用程序的签名来确定是否给予该程序request的权限。在用户使用过程中不会去检查权限,也就是说要么在安装的时候就批准该权限,使其按照设计可以使用该权限;要么就不批准,这样用户也就根本无法使用该feature,也不会有任何提示告知用户尝试失败。

例如高级权限用有system级别权限设定的api时,需要使其apk拥有system权限。比如在 android 的API中有供给SystemClock.setCurrentTimeMillis()函数来修改系统时间。有两个方法:


第一个方法简单点,不过需要在Android系统源码的情况下用make来编译:

1. 在应用程序的AndroidManifest.xml中的manifest节点中插手android:sharedUserId="android.uid.system"这个属性。

2. 修改Android.mk文件,插手LOCAL_CERTIFICATE := platform这一行

3. 使用mm命令来编译,生成的apk就有修改系统时间的职权范围了


第2个方法麻烦点,不外不消开虚拟机跑到源码情况下用make来编译:

1. 同上,插手android:sharedUserId="android.uid.system"这个属性。

2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。

3. 使用针系统的platform密码钥匙来从头给apk文件签名。signapk platform.x509.pem platform.pk8 input.apk output.apk



三. 自定义Permission


Android系统定义的权限可以在Manifest.permission中找到。任何一个程序都可以定义并强制执行自己独有的permissions,因此Manifest.permission中定义的permissions并不是一个完整的列表(即能有自定义的permissions)。

一个特定的permission可能会在程序操作的很多地方都被强制实施:

当系统有来电的时候,用以阻止程序执行其它功能。

当启动一个activity的时候,会阻止应用程序启动其它应用的Acitivity。

在发送和接收广播的时候,去控制谁可以接收你的广播或谁可以发送广播给你。

当进入并操作一个content provider的时候。

当绑定或开始一个service的时候。



四.组件权限


通过 AndroidManifest.xml 文件可以设置高级权限,以限制访问系统的所有组件或者使用应用程序。所有的这些请求都包含在你所需要的组件中的 android【Android开发网上的一些重要知识4。。。。】-android开发基础知识ermission属性,命名这个权限可以控制访问此组件。
1. Activity 权限 (使用 <activity> 标签) 限制能够启动与 Activity 权限相关联的组件或应用程序。在 Context.startActivity() 和 Activity.startActivityForResult() 期间检查;
2.Service 权限(应用 <service> 标签)限制启动、绑定或启动和绑定关联服务的组件或应用程序。此权限在 Context.startService(), Context.stopService() 和 Context.bindService() 期间要经过检查;
3. BroadcastReceiver 权限(应用 <receiver> 标签)限制能够为相关联的接收者发送广播的组件或应用程序。在 Context.sendBroadcast() 返回后此权限将被检查,同时系统设法将广播递送至相关接收者。因此,权限失败将会导致抛回给调用者一个异常;它将不能递送到目的地。在相同方式下,可以使 Context.registerReceiver() 支持一个权限,使其控制能够递送广播至已登记节目接收者的组件或应用程序。其它的,当调用 Context.sendBroadcast() 以限制能够被允许接收广播的广播接收者对象一个权限(见下文)。
4. ContentProvider 权限(使用 <provider> 标签)用于限制能够访问 ContentProvider 中的数据的组件或应用程序。

如果调用者没有请求权限,那么会为调用抛出一个安全异常( SecurityException )。在所有这些情况下,一个SecurityException异常从一个调用者那里抛出时不会存储请求权限结果。




级别: *
发帖
*
云币
*


LogCat命令详细说明
分类: Android2012-07-16 10:47 1075人阅读 评论(0) [url=]收藏[/url] 举报

androidshellthreadtagscommandaction

Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用.



使用logcat命令


你可以用 logcat 命令来查看系统日志缓冲区的内容:

[adb] logcat [<option>] ... [<filter-spec>] ...

请查看Listing of logcat Command Options ,它对logcat命令有详细的描述 .


你也可以在你的电脑或运行在模拟器/设备上的远程adb shell端来使用logcat命令,也可以在你的电脑上查看日志输出。

$ adb logcat

你也这样使用:

# logcat
过滤日志输出

每一个输出的Android日志信息都有一个标签和它的优先级.



  • 日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就是查看系统的标签).

  • 优先级有下列集中,是按照从低到高顺利排列的:

    • V — Verbose (lowest priority)

    • D — Debug

    • I — Info

    • W — Warning

    • E — Error

    • F — Fatal

    • S — Silent (highest priority, on which nothing is ever printed)










级别: *
发帖
*
云币
*


五. 发送广播时支持权限


当发送一个广播时你能总指定一个请求权限,此权限除了权限执行外,其它能发送Intent到一个已注册的BroadcastReceiver的权限均可以。通过调用Context.sendBroadcast()及一些权限字符串,为了接收你的广播,你请求一个接收器应用程序必须持有那个权限。注意,接收者和广播者都能够请求一个权限。当这样的事发生了,对于Intent来说,这两个权限检查都必须通过,为了交付到共同的目的地。



六. 其它权限支持


在调用service的过程中可以设置任意的fine-grained permissions(更为细化的权限)。这是通过Context.checkCallingPermission()方法来完成的。使用一个想得到的permission string来进行呼叫,然后当该权限获批的时候可以返回给呼叫方一个Integer(没有获批也会返回一个Integer)。需要注意的是这种情况只能发生在来自另一个进程的呼叫,通常是一个service发布的IDL接口或者是其他方式提供给其他的进程。

Android提供了很多其他的方式用于检查permissions。如果你有另一个进程的pid,你就可以通过Context的方法Context.checkPermission(String, int, int)去针对那个pid去检查permission。如果你有另一个应用程序的package name,你可以直接用PackageManager的方法 PackageManager.checkPermission(String, String) 来确定该package是否已经拥有了相应的权限。



七. URI权限



到目前为止我们讨论的标准的permission系统对于content provider来说是不够的。一个content provider可能想保护它的读写权限,而同时与它对应的直属客户端也需要将特定的URI传递给其它应用程序,以便其它应用程序对该URI进行操作。一个典型的例子就是邮件程序处理带有附件的邮件。进入邮件需要使用permission来保护,因为这些是敏感的用户数据。然而,如果有一个指向图片附件的URI需要传递给图片浏览器,那个图片浏览器是不会有访问附件的权利的,因为他不可能拥有所有的邮件的访问权限。

针对这个问题的解决方案就是per-URI permission:当启动一个activity或者给一个activity返回结果的时候,呼叫方可以设置Intent.FLAG_GRANT_READ_URI_PERMISSION和/或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION . 这会使接收该intent的activity获取到进入该Intent指定的URI的权限,而不论它是否有权限进入该intent对应的content provider。




这种机制允许一个通常的capability-style模型,这种模型是以用户交互(如打开一个附件, 从列表中选择一个联系人)为驱动,特别获取fine-grained permissions(更细粒化的权限)。这是一种减少不必要权限的重要方式,这种方式主要针对的就是那些和程序的行为直接相关的权限。

这些URI permission的获取需要content provider(包含那些URI)的配合。强烈推荐在content provider中提供这种能力,并通过android:grantUriPermissions或者<grant-uri-permissions>标签来声明支持。



八. 小结

1.拥有signature的权限是否可以不用声明<uses-permission>就能access带normal或dangerous权限设定的数据或功能?

只要signature相同,就算不显式声明<ues-permission>也能access设定了normal或dangerous权限设定的数据或功能。



2.若需要system级别权限使用系统api(即使用system级别的签名),如何同时使用其他signature权限设定(即使用signature级别的签名)的其他apk的功能?

拥有system级别权限的使用者可以access其他普通signature权限声明设定过的功能。

所以,设定为拥有system级别权限即可。

级别: *
发帖
*
云币
*


5、 Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现



  <TextView  


    android:id="@+id/tvCWJ"  


    android:layout_width="fill_parent"  


    android:layout_height="wrap_content"  


    android:scrollbars="vertical"   <!--垂直滚动条 -->


    android:singleLine="false"       <!--实现多行 -->


    android:maxLines="15"            <!--最多不超过15行 -->


    android:textColor="#FF0000"


  />  


   当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下



TextView tvAndroid123 = (TextView)findViewById(R.id.tvCWJ);   


tvAndroid123.setMovementMethod(ScrollingMovementMethod.getInstance());


ad_link = (TextView) findViewById(R.id.ad_link);   


ad_link.setText(Html.fromHtml("<a href="\"mce_href="\"""+mURL.getLink()+"\">"+Html.fromHtml(mURL.getLabel()+"</a>")));   


ad_link.setMovementMethod(LinkMovementMethod.getInstance());




级别: *
发帖
*
云币
*


Android 安全访问机制
分类: Android2012-07-15 19:16 1323人阅读 评论(0) [url=]收藏[/url] 举报

androidpermissionsstring数据库linuxuser
概述:


Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行。系统和应用之间的安全性通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给应用程序分配user ID和Group ID。更细化的安全特性是通过"Permission"机制对特定的进程的特定的操作进行限制,而"per-URI permissions"可以对获取特定数据的access专门权限进行限制。 所以,应用程序之间的一般是不可以互相访问的,但是anroid提供了一种permission机制,用于应用程序之间数据和功能的安全访问。

一 . 安全架构


Android安全架构中一个中心思想就是:应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。这包括读或写用户的私有数据(如联系人数据或email数据),读或写另一个应用程序的文件,网络连接,保持设备处于非睡眠状态。

一个应用程序的进程就是一个安全的沙盒。它不能干扰其它应用程序,除非显式地声明了“permissions”,以便它能够获取基本沙盒所不具备的额外的能力。它请求的这些权限“permissions”可以被各种各样的操作处理,如自动允许该权限或者通过用户提示或者证书来禁止该权限。应用程序 需要的那些“permissions”是静态的在程序中声明,所以他们会在程序安装时被知晓,并不会再改变。


所有的Android应用程序(。apk文件)必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要CA签名认证(注:CA就是一个第三方的证书认证机构,如verisign等)。Android应用程序允许而且一般也都是使用self- signed证书(即自签名证书)。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的permisssions,以及谁可以share 用户IDs。

二. 用户IDs和文件存取

每一个Android应用程序(。apk文件)都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触(也不会让其它应用程序接触它)。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。

由于安全性限制措施是发生在进程级,所以两个package中的代码不会运行在同一个进程当中,他们要作为不同的Linux用户出现。我们可以通过 使用AndroidManifest。xml文件中的manifest标签中的sharedUserId属性,来使不同的package共用同一个用户 ID。通过这种方式,这两个package就会被认为是同一个应用程序,拥有同一个用户ID(实际不一定),并且拥有同样的文件存取权限。注意:为了保持安全,只有当两个应用程序被同一个签名签署的时候(并且请求了同一个sharedUserId)才会被分配同样的用户ID。



发表主题 回复主题
« 返回列表
«12345678910»
共10页
上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)

      版权声明

      开发者论坛为你提供“【Android开发网上的一些重要知识4。。。。】”的内容,论坛中还有更多关于 “【Android开发网上的一些重要知识4。。。。】” 的内容供你使用,该内容是网友上传,与开发者论坛无关,如果需要删除请联系zixun-group@service.aliyun.com,工作人员会在5个工作日内回复您。