• 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);
  • 相关阅读:
    C++编译期间字节序判断
    解决:无法使用前导 .. 在顶级文件夹上退出
    手动脱WinUpack 壳实战
    浅谈cocos2dx(18) 中工厂模式
    手把手带你画一个 时尚仪表盘 Android 自己定义View
    Git实战(二)原理
    <html>
    Ubuntu局域网下利用client联网
    Desugar Scala(17) -- Option和for,以及脑子里发生的事情
    通过Canvas及File API缩放并上传图片完整演示样例
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1982081.html
Copyright © 2020-2023  润新知