当前位置:  编程技术>移动开发
本页文章导读:
    ▪Security and Permissions 保险与权限 (八)        Security and Permissions 安全与权限 (八) URI PermissionsThe standard permission system described so far is often not sufficient when used with content providers. A content provider may want to protect itself with read and write permissio.........
    ▪ IntentFilter 引见        IntentFilter 介绍 IntentFilter 简述:结构化描述intent匹配的信息。包含:action,categories and data(via type,scheme ,path),还有priority, to order multiple matching filters.        IntentFilter 中如果action为空,则.........
    ▪ 转载:Andorid小項目之-Animation4種動畫的圖片效果(附源碼)       转载:Andorid小項目之--Animation四種動畫的圖片效果(附源碼) 繼上篇未講述完的動畫實例效果,本篇將會全部實現android小種類型動畫的效果,這次為了方便我沒有用xml文件加載,如果追.........

[1]Security and Permissions 保险与权限 (八)
    来源: 互联网  发布时间: 2014-02-18
Security and Permissions 安全与权限 (八)
URI Permissions

The standard permission system described so far is often not sufficient when used with content providers. A content provider may want to protect itself with read and write permissions, while its direct clients also need to hand specific URIs to other applications for them to operate on. A typical example is attachments in a mail application. Access to the mail should be protected by permissions, since this is sensitive user data. However, if a URI to an image attachment is given to an image viewer, that image viewer will not have permission to open the attachment since it has no reason to hold a permission to access all e-mail.
到目前为止我们讨论的标准的permission系统对于content provider来说是不够的。一个content provider可能想保护它的读写权限,而同时与它对应的直属客户端也需要将特定的URI传递给其它应用程序,以便其它应用程序对该URI进行操作。一个典型的例子就是邮件程序处理带有附件的邮件。进入邮件需要使用permission来保护,因为这些是敏感的用户数据。然而,如果有一个指向图片附件的URI需要传递给图片浏览器,那个图片浏览器是不会有访问附件的权利的,因为他不可能拥有所有的邮件的访问权限。

The solution to this problem is per-URI permissions: when starting an activity or returning a result to an activity, the caller can set Intent.FLAG_GRANT_READ_URI_PERMISSION and/or Intent.FLAG_GRANT_WRITE_URI_PERMISSION . This grants the receiving activity permission access the specific data URI in the Intent, regardless of whether it has any permission to access data in the content provider corresponding to the Intent.
针对这个问题的就是per-URI permission: 当启动一个activity或者给一个activity返回结果的时候,呼叫方可以设置Intent.FLAG_GRANT_READ_URI_PERMISSION 和/或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION . 这会使接收该intent的activity获取到进入该Intent指定的URI的权限,而不论它是否有权限进入该intent对应的content provider。

This mechanism allows a common capability-style model where user interaction (opening an attachment, selecting a contact from a list, etc) drives ad-hoc granting of fine-grained permission. This can be a key facility for reducing the permissions needed by applications to only those directly related to their behavior.
The granting of fine-grained URI permissions does, however, require some cooperation with the content provider holding those URIs. It is strongly recommended that content providers implement this facility, and declare that they support it through the android:grantUriPermissions attribute or <grant-uri-permissions> tag.
More information can be found in the Context.grantUriPermission() , Context.revokeUriPermission() , and Context.checkUriPermission() methods.
这种机制允许一个通常的capability-style模型, 这种模型是以用户交互(如打开一个附件, 从列表中选择一个联系人)为驱动,特别获取更细粒化的权限。这是一种减少不必要权限的重要方式,这种方式主要针对的就是那些和程序的行为直接相关的权限。
这些URI permission的获取需要content provider(包含那些URI)的配合。强烈推荐在content provider中提供这种能力,并通过android:grantUriPermissions 或者<grant-uri-permissions> 标签来声明支持。
更多的信息可以参考Context.grantUriPermission() , Context.revokeUriPermission() , and Context.checkUriPermission() methods.

    
[2] IntentFilter 引见
    来源: 互联网  发布时间: 2014-02-18
IntentFilter 介绍
IntentFilter
简述:结构化描述intent匹配的信息。包含:action,categories and data(via type,scheme ,path),还有priority, to order multiple matching filters.
       IntentFilter 中如果action为空,则视为通配符,如果type为空,则intent必须不设type,否则匹配不上。
       data被分为3个属性:type,scheme,authority/path 任何设置的属性intent必须匹配上。
                           设置了scheme 而没设type,则intent也必须类似,不能设置type,也不能是content: URI.
                           设置了type而没设scheme:将匹配上没有URI的intent,或者content:,file:的uri。
                           设置了authority:必须指定一个或多个相关联的schemes
                           设置了path:唏嘘指定一个或多个相关联的schemes
       匹配规则:
           IntentFilter 匹配Intent的上的条件:
           Action : 值相同 ,或则IntentFilter未指定action.
           DataType:. 系统通过调用Intent.resolve(ContentResolver)获取type,通配符*
                     在Intent/IntentFilter的MIME type中使用,区分大小写
           DataScheme:系统通过调用Intent. getData() and Uri.getScheme())获取scheme, 区分大小写
           DataAuthority:必须有一个dataScheme匹配上且authority值匹配上,或者IntentFilter没有定义。Intent. getData() and Uri.getAuthority()获取authority.
           DataPath: scheme and authority必须先匹配上 ntent. getData() and Uri.getPath(),获取. 或者IntentFilter没有定义
           Categories:all of the categories in the Intent match categories given in the filter 多余的Categorie,不影响intent匹配,如果IntentFilter
                  没有指定Categorie,则只能匹配上没有Categorie的intent。

常用intent列表:
Android Intent 用法汇总
显示网页
- <activity android:name="BrowserActivity" android:label="Browser" android:launchMode="singleTask" android:alwaysRetainTaskState="true" android:configChanges="orientation|keyboardHidden" android:theme="@style/BrowserTheme">
- <!--
For these schemes were not particular MIME type has been
                 supplied, we are a good candidate.
  -->
- <intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:scheme="about" />
  </intent-filter>
- <!--
  For these schemes where any of these particular MIME types
                  have been supplied, we are a good candidate.
  -->
- <intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:mimeType="text/html" />
  <data android:mimeType="text/plain" />
  <data android:mimeType="application/xhtml+xml" />
  <data android:mimeType="application/vnd.wap.xhtml+xml" />
  </intent-filter>
- <!--
We are also the main entry point of the browser.
  -->
- <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.LAUNCHER" />
  <category android:name="android.intent.category.BROWSABLE" />
  </intent-filter>
- <intent-filter>
  <action android:name="android.intent.action.WEB_SEARCH" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  </intent-filter>
- <intent-filter>
  <action android:name="android.intent.action.WEB_SEARCH" />
  <action android:name="android.intent.action.MEDIA_SEARCH" />
  <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
- <intent-filter>
  <action android:name="android.intent.action.SEARCH" />
  <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
  <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
- <intent-filter>
  <action android:name="android.net.http.NETWORK_STATE" />
  <action android:name="android.intent.action.PROXY_CHANGE" />
  </intent-filter>
  </activity>

1. Uri uri = Uri.parse("http://google.com");  
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
   3. startActivity(it); 

显示地图

   1. Uri uri = Uri.parse("geo:38.899533,-77.036476");  
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);   
   3. startActivity(it);   
   4. //其他 geo URI 範例  
   5. //geo:latitude,longitude  
   6. //geo:latitude,longitude?z=zoom  
   7. //geo:0,0?q=my+street+address  
   8. //geo:0,0?q=business+near+city  
   9. //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom 



路径规划

   1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");  
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
   3. startActivity(it);  
   4. //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456  


打电话
   1. //叫出拨号程序 
   2. Uri uri = Uri.parse("tel:0800000123");  
   3. Intent it = new Intent(Intent.ACTION_DIAL, uri);  
   4. startActivity(it);  

   1. //直接打电话出去  
   2. Uri uri = Uri.parse("tel:0800000123");  
   3. Intent it = new Intent(Intent.ACTION_CALL, uri);  
   4. startActivity(it);  
   5. //用這個,要在 AndroidManifest.xml 中,加上  
   6. //<uses-permission id="android.permission.CALL_PHONE" />  

传送SMS/MMS
   1. //调用短信程序 
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
   3. it.putExtra("sms_body", "The SMS text");   
   4. it.setType("vnd.android-dir/mms-sms");  
   5. startActivity(it); 

   1. //传送消息 
   2. Uri uri = Uri.parse("smsto://0800000123");  
   3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
   4. it.putExtra("sms_body", "The SMS text");  
   5. startActivity(it); 

   1. //传送 MMS  
   2. Uri uri = Uri.parse("content://media/external/images/media/23");  
   3. Intent it = new Intent(Intent.ACTION_SEND);   
   4. it.putExtra("sms_body", "some text");   
   5. it.putExtra(Intent.EXTRA_STREAM, uri);  
   6. it.setType("image/png");   
   7. startActivity(it);  

传送 Email
   1. Uri uri = Uri.parse("mailto:xxx@abc.com");  
   2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
   3. startActivity(it);  

   1. Intent it = new Intent(Intent.ACTION_SEND);  
   2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");  
   3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");  
   4. it.setType("text/plain");  
   5. startActivity(Intent.createChooser(it, "Choose Email Client"));  

   1. Intent it=new Intent(Intent.ACTION_SEND);    
   2. String[] tos={"me@abc.com"};    
   3. String[] ccs={"you@abc.com"};    
   4. it.putExtra(Intent.EXTRA_EMAIL, tos);    
   5. it.putExtra(Intent.EXTRA_CC, ccs);    
   6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");    
   7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");    
   8. it.setType("message/rfc822");    
   9. startActivity(Intent.createChooser(it, "Choose Email Client")); 

   1. //传送附件
   2. Intent it = new Intent(Intent.ACTION_SEND);  
   3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
   4. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");  
   5. sendIntent.setType("audio/mp3");  
   6. startActivity(Intent.createChooser(it, "Choose Email Client")); 

播放多媒体
       Uri uri = Uri.parse("file:///sdcard/song.mp3");  
       Intent it = new Intent(Intent.ACTION_VIEW, uri);  
       it.setType("audio/mp3");  
       startActivity(it); 



       Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");  
       Intent it = new Intent(Intent.ACTION_VIEW, uri);  

       startActivity(it); 



Market 相关
1.        //寻找某个应用 
2.        Uri uri = Uri.parse("market://search?q=pname:pkg_name"); 
3.        Intent it = new Intent(Intent.ACTION_VIEW, uri);  
4.        startActivity(it);  
5.        //where pkg_name is the full package path for an application 

1.        //显示某个应用的相关信息 
2.        Uri uri = Uri.parse("market://details?id=app_id");  
3.        Intent it = new Intent(Intent.ACTION_VIEW, uri); 
4.        startActivity(it);  
5.        //where app_id is the application ID, find the ID   
6.        //by clicking on your application on Market home   
7.        //page, and notice the ID from the address bar 


Uninstall 应用程序
1.        Uri uri = Uri.fromParts("package", strPackageName, null); 
2.        Intent it = new Intent(Intent.ACTION_DELETE, uri);   
3.        startActivity(it);  

    
[3] 转载:Andorid小項目之-Animation4種動畫的圖片效果(附源碼)
    来源: 互联网  发布时间: 2014-02-18
转载:Andorid小項目之--Animation四種動畫的圖片效果(附源碼)
繼上篇未講述完的動畫實例效果,本篇將會全部實現android小種類型動畫的效果,這次為了方便我沒有用xml文件加載,如果追求OO原則可以自行創建XML,根據具體參數自行配置。

四種動畫效果運行圖:




漸變Alpha

拉伸由大到小Scale

移位Translate

旋轉Rotate
  本篇重點:定義Gallery組件的屬性信息,通過在res\Values\attrs.xml文件定,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="Gallery">
    <attr name="android:galleryItemBackground" />
  </declare-styleable>
</resources>



以上XML屬性信息設置了Gallery組件的背景風格

注意:這個XML一定要放在values下麵,如果將它放在layout目錄下,將無法讀取;

如果設置Gallery數據,我在此就不多說了,您可以在我之前的博客獲得相關的操作方法:http://www.cnblogs.com/TerryBlog/archive/2010/05/17/1737789.html

在這里重點要說的就是以下幾段代碼 :

片段一:

代码
    private int mGalleryItemBackGround;  //獲取資源ID
    public static int[] myImageArray=
    {
            R.drawable.one,
            R.drawable.two,
            R.drawable.three,
            R.drawable.four,
            R.drawable.five,
            R.drawable.six
    };
    private Context mContext;
    private int Height;
    private int Width;
    public ImageAdapter(Context c,int height,int width)
    {
        mContext=c;
        Height=height;
        Width=width;
        TypedArray ta=c.obtainStyledAttributes(R.styleable.Gallery);
        mGalleryItemBackGround=ta.getResourceId(R.styleable.Gallery_android_galleryItemBackground,
                0);
       
        ta.recycle();
    }


構造函數裏面,帶了一個上下文,一個高度,一個寬度。

參數一:為了防止這個錯误“The method obtainStyledAttributes(int[]) is undefined for the type ImageAdapter”,意思是obtainStyledAttributes()是Context类中的方法,如果将ImageAdapter单独写在一个.java文件中的话,必须在obtainStyledAttributes()方法前加上方法的引用才能解决问题。

參數二三:是為了後面設置圖片的高度和寬度,後方將有介紹。

代碼示意:通過TypedArray或者Gallery組件屬性,然後設置Gallery的背景風格,之后通過TypedArray所得到的對象,設置Gallery組件無無限循環顯示。

片段二:

代码
public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ImageView iv=new ImageView(mContext);
        iv.setImageResource(myImageArray[position]);
    
        iv.setScaleType(ImageView.ScaleType.FIT_CENTER);  //設置圖片的寬高
       
        iv.setLayoutParams(new Gallery.LayoutParams(Width, Height));     //設置圖片的寬高
       
        iv.setBackgroundResource(mGalleryItemBackGround);        //通過 上面設置的資源ID設置背景圖
        return iv;
    }


重寫getView這個方法,設置圖片的資源,之后通過setLayoutParams這個方法用傳進來的高度和寬度設置圖片寬高。

如何獲取屏幕的高度和寬度:



import android.util.DisplayMetrics; //命名空間

DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);




之后通過dm.heightPixels,dm.widthPixels  的屬性可得到屏幕高度和寬度。

基本工作完畢,現在到了我們的動畫階段,四種動畫定義如下:

代码


private Animation myAnimationAlpha;
    private Animation myAnimationScale;
    private Animation myAnimationTranslate;
    private Animation myAnimationRotate;

myAnimationAlpha=new AlphaAnimation(0.1f, 1.0f);
        myAnimationAlpha.setDuration(3000);
       
        myAnimationScale=new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        myAnimationScale.setDuration(3000);
       
        myAnimationTranslate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
        myAnimationTranslate.setDuration(3000);
       
       myAnimationRotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
       myAnimationRotate.setDuration(3000);




詳細參數說明請看這里:http://www.cnblogs.com/TerryBlog/archive/2010/05/30/1747311.html

定義好了動畫的顯示方式,就可以在Gallery組件上做動作了,做一個點擊事件監聽,當用戶每點擊一次就執行一次動畫,四種動畫效果就循環交替顯示各自的魅力

代碼如下:

代码
  myGallery.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated methsod stub
                ImageView ig=(ImageView)arg1;
                switch (i) {
                case 0:
                    ig.startAnimation(myAnimationAlpha);
                    i++;
                    break;
                case 1:
                    ig.startAnimation(myAnimationScale);
                    i++;
                    break;
                case 2:
                    ig.startAnimation(myAnimationTranslate);
                    i++;
                    break;
                case 3:
                    ig.startAnimation(myAnimationRotate);
                    i=0;
                    break;
                default:
                    break;
                }
               
               
                //ImageAdapter.myImageArray[arg2];
            }
        });


總結:

一開始看到動畫效果複雜的參數列表,有點關暈,但耐下心來看一下,覺得還是有一定的規律的,掌握好這門動畫課程以后項目上的動畫效果將迎刃而解。
转载出:http://www.cnblogs.com/TerryBlog/archive/2010/05/31/1748628.html

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3