zoukankan      html  css  js  c++  java
  • Android之Intent探究

    在一个Android应用中,主要由四种组件组成(四种组件分别为:Activity、Broadcast、Service、ContentProvider),而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。

           

    Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。

                            

    因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

                     

    例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为ListActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为DetailActivity)为了实现这个目的,ListActivity需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity(Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到AndroidManifest.xml中找到满足此Intent要求的Activity,系统会调用找到的Activity,即为DetailActivity,最终传入Intent,DetailActivity则会根据此Intent中的描述,执行相应的操作。

    显示网页
    Uri uri
    = Uri.parse("http://www.google.com.hk/");
    Intent intent
    = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);


    显示地图
    Uri uri
    = Uri.parse("geo:38.899533,-77.036476");
    Intent intent
    = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    //其他geo URI范例(latitude: 纬度,longitude: 经度)
    //geo:latitude,longitude
    //geo:latitude,longitude?z=zoom
    //geo:0,0?q=my+street+address
    //geo:0,0?q=business+near+city
    //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom



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


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

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

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

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

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

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

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

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

    //传送附件
    Intent it = new Intent(Intent.ACTION_SEND);
    it.putExtra(Intent.EXTRA_SUBJECT,
    "The email subject text");
    it.putExtra(Intent.EXTRA_STREAM,
    "file:///sdcard/mysong.mp3");
    sendIntent.setType(
    "audio/mp3");
    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 相关
    //寻找某个应用
    Uri uri = Uri.parse("market://search?q=pname:pkg_name");
    Intent it
    = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(it);
    //where pkg_name is the full package path for an application

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

    Uninstall 应用程序
    Uri uri
    = Uri.fromParts("package", strPackageName, null);
    Intent it
    = new Intent(Intent.ACTION_DELETE, uri);
    startActivity(it);
  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1982081.html
Copyright © 2011-2022 走看看