只前打过下面的比方,Activity就像是网页,而超链接就是安卓里面的Intent。而Intent在安卓的框架里用的很多,这里总结下Intent本身的用法。

Intent的构造方式

  1. 对于同一个应用内,优先使用Intent的class方式来构造,比如:
            context.startActivity(new Intent(context, HomeActivity.class));
            
    因为这样系统框架在解析Intent时,可以直接找到对应的包和类,最为高效。
  2. 使用某个特定的Action来构造,注意:字符串需要有namespace前缀保证不冲突,本身是大小写敏感
            //一个好的例子,com.bear.test限定了范围,ACTION_VIEW表意,用大写来区分
            context.startActivity(new Intent("com.bear.test.ACTION_VIEW"));
            //坏的例子,没有范围,容易和别的应用冲突
            context.startActivity(new Intent("ACTION_VIEW"));
            
    因为系统是根据这个字符串来匹配查找对应的处理类,所以性能比上面的方式要弱,而且如果你的Action和别人重复了,如果就Activity而言,系统会弹出选择对话框,由用户选择用那个打开。
  3. 使用Acition和URI方式创建Intent,比如下面代码:
            context.startActivity(new Intent.ACTION_VIEW, 
                        Uri.parse("http://www.douban.com/online/11601355/")));
            //对应的Activity在manifest里的声明
            <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:host="www.douban.com" android:pathPattern="/online/.*/"
                                    android:scheme="http"/>
            </intent-filter>
            
    这种方式可以在响应点击url链接时,调用对应的Activity时使用。

从上面可以看出,安卓框架会从最精准到最宽泛的条件来匹配响应Intent的处理。所以无论构造还是响应Intent时,都要注意这个原则。

Intent的常见用途

  1. 调用Activity,如上面所列
  2. 调用Activity,并获得返回
  3. 启动,绑定,关闭Sevice
  4. 发广播给BroadcastReceiver

另外Intent可以挟带数据,使用key/value的方式,比较方便,使用putExtra和getXxxExtra方法。注意的是,Intent里最好不要存太大的数据,比如比较大的Bitmap。

应用互调

因为有Intent这样超链接的存在,在安卓上,应用直接互相调用功能来配合完成任务是很常见的做法。比如调用Camera的拍照功能,获得照片;调用Gallery来获取图片;使用分享组件,讲文字或者图片分享到其他应用,如Google Plus,Instagram等。

        int REQUEST_CAMERA = 100;
        try {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            String path = ExternalStorageUtils.getExternalCacheDir(
                        getPackageName()).getAbsolutePath() + File.separator + "test.jpg"
                        );
            File file = new File(path);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
            startActivityForResult(intent, REQUEST_CAMERA);
        } catch (ActivityNotFoundException e) {
            //要捕获这个异常,否则在没有Camera应用的设备上会fc
        }
        

上面的代码就是调用相机来拍照并获得照片的例子。另外一个典型的例子是使用ShareActionProvider来分享。

    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    //设置分享的标题
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "美图一张");
    //shareIntent.setType("text/plain"); //如果只是分享文字的话
    //设置分享的是图片
    shareIntent.setType("image/*");
    String path = ExternalStorageUtils.getExternalCacheDir(
                        getPackageName()).getAbsolutePath() + File.separator + "test.jpg"
                        );
    File file = new File(path);
    //设置分享图片的路径
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
        

上面是构造分享的Intent,这样所有接受分享的应用都能被列出来,调用。当然比较恶心的某些应用比如微信,如果使用默认的系统的标准ACTION_SEND,得到的结果并不是最好的,需要使用他们的SDK,除非特别需要,不建议使用SDK,那样会造成分享功能的复杂化。


文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

很有用的文章

轉自http://blog.csdn.net/watkinsong/article/details/9849973

 

 

 

以前写过两个Android开发配置文档,使用NDK进行JNI开发,这样能够利用以前已经写好的C++代码。

前两篇博客地址:

 http://blog.csdn.net/watkinsong/article/details/8829072

http://blog.csdn.net/watkinsong/article/details/8829235

 

戮克 發表在 痞客邦 留言(0) 人氣()

参考资料:http://www.cnblogs.com/olvo/archive/2012/05/21/2511632.html

http://wenku.baidu.com/view/b1a339ebaeaad1f346933f70.html

在安卓中,只有垂直的linearlayout属性里面的内部组件靠左靠右才有效,同理,水平的linearlayout属性里面的内部组件靠上靠下才有效,否则无效由此考虑如何让水平linearlayout中同一行内组件靠左靠右显示呢,

复制代码
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:background="#acc">
        <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_weight="1">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center_vertical"
            android:layout_marginLeft="3.0dip"
            android:background="@drawable/move_on1"/>
            </LinearLayout>
        <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_weight="1">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|center_vertical"
            android:layout_marginRight="3.0dip"
            android:background="@drawable/stopa" />
            </LinearLayout>
    </LinearLayout>
    
复制代码


文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

该文章转自网络

关于条形码扫描的软件,做软件需求时需要扫描时竖屏:       

android提供的SDK(android.hardware.Camera)里大概不能正常的使用竖屏(portrait layout)加载照相机,当用竖屏模式加载照相机时会产生以下情况:

1. 照相机成像左倾90度(倾斜);

2. 照相机成像长宽比例不对(失比)。

基本上解决办法如下:

1、在AndroidManifest.xml里面配置一下 ,使CaptureActivity属性为portrait:   android:screenOrientation="portrait"

2、如果只是单纯的想改变照相机成像的方向,只需要在包com.google.zxing.client.android.camera下的   CameraConfigurationManager类中增加方法   

protected void setDisplayOrientation(Camera camera, int angle) {

        Method downPolymorphic;        

文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

轉:

http://blog.csdn.net/android_tutor/article/details/5740845

 

大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧!

第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:

 

第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下

[java] view plaincopy
 

戮克 發表在 痞客邦 留言(0) 人氣()

http://blog.csdn.net/xiaoliouc/article/category/1309838

 

 

 

浏览器使用quicktime插件播放rtsp实时视频流

前阵子写了一篇在浏览器用vlc插件播放rtsp实时视频流的文章,当时测试电脑是xp,测试效果还行。但在win7下不可以使用,提示该插件未知,为了电脑的安全性,禁止被使用。这几天想了想,换用quicktime插件播放rtsp实时视频流。 核心代码如下; 简要分析下这段代码, ...   一个ActiveX控件,被嵌入IE浏览器中,需要classid,...
 阅读(4261) 评论(6)
 
 

android推送实时视频流到darwin流媒体服务器的思路

最近在弄android推送实时视频流到darwin流媒体服务器,现在的思路是在android端实现rtsp client,推送实时视频流到darwin,并在movies文件夹下生成sdp文件,vlc通过请求rtsp://darwin流媒体服务器ip:554/test.sdp的方式实现实时播放。          大致有3种思路:          第1种:移植live555到android上,...
文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()