Android之Intent

2018-06-13  本文已影响13人  Jowney

前言

每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面。因为每一个Acticity的任务不一样,所以经常互在各个Activity之间进行跳转,在Android中这个动作是靠Intent来完成的。你通过startActivity()方法发送一个Intent给系统,系统会根据这个Intent帮助你找到对应的Activity,即使这个Activity在其他的应用中,也可以用这种方法启动它。

Intent的定义

Intent意图可以是明确的指定组件(四大组件)的名称,这样你可以精确的启动某个系统组件,比如启动一个Activity。它也可以是模糊的,没有指定组件名称,只要是能够匹配到这个Intent的应用都可以接收到,比如发送一个拍照Intent,所有的拍照应用都会响应。

显式Intent和隐式Intent

  1. 显式的Intent就是你已经知道要启动的组件名称,比如某个Activity的包名和类名,在Intent中明确的指定了这个组件(Activity),一般来说这种Intent经常用在一个应用中,因为你已经明确的知道要启动的组件名称。

    当你创建一个显式Intent来启动一个Activity或者Service时,系统会立刻通过你的Intent对象启动那个组件。

  2. 隐式的Intent就是你不知道要启动的组件名称,只知道一个Intent动作要执行,比如:拍照,录像,查看地图。一般来说这种Intent用在不同的应用之间传递信息。

    当你创建一个隐式Intent,系统会根据manifest file中的intent filter找匹配的组件,如果你发送的Intent匹配到一个intent filter,系统会把你的Intent传递给该filter对应的组件(Activity、Service等),并且启动它。如果找到多个匹配的intent filter对应的应用程序,则会弹出一个对话框让你选择哪个应用程序接受你的Intent。

注:

Intent七大属性

Intent对象大致包括7大属性:ComponentName、 Action 、 Category 、 Data 、Type、 Extra 、Flag。

捉到一只Sample↓↓↓↓↓

MianActivity.java


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//从Android 7.0开始,一个应用提供自身文件给其它应用使用时,如果给出一个file://格式的URI的话,应用会抛出FileUriExposedException。
//解决方法置入一个不设防的VmPolicy,但是要确保目标应用有本地读写权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }

    }
    public void clickButton(View view) {

        Intent intent = new Intent();

        intent.setAction(android.content.Intent.ACTION_VIEW);



        switch (view.getId()) {

            case R.id.button_main_call:

                intent.setAction(Intent.ACTION_CALL);

                intent.setData(Uri.parse("tel:10086"));

                break;

            case R.id.button_main_dial:

                intent.setAction(Intent.ACTION_DIAL);

                intent.setData(Uri.parse("tel:10086"));

                break;

            case R.id.button_main_dialer:

                intent.setAction("com.android.phone.action.TOUCH_DIALER");

                break;

            case R.id.button_main_sms:

                intent.setAction(Intent.ACTION_SENDTO);

                intent.setData(Uri.parse("smsto:10086"));
                intent.putExtra("sms_body", "该吃饭了,下课吧!");

                break;

            case R.id.button_main_setting:

                intent.setAction("android.settings.SETTINGS");

                break;

            case R.id.button_main_datesetting:

                intent.setAction("android.settings.DATE_SETTINGS");

                break;

            case R.id.button_main_soundsetting:

                intent.setAction("android.settings.SOUND_SETTINGS");

                break;

            case R.id.button_main_wifisetting:

                intent.setAction("android.settings.WIFI_SETTINGS");

                break;

            case R.id.button_main_contacts:

                intent.setAction("com.android.contacts.action.LIST_CONTACTS");

                break;

            case R.id.button_main_web:

                intent.setAction(android.content.Intent.ACTION_VIEW);

                intent.setData(Uri.parse("http://www.baidu.com"));

                break;

            case R.id.button_main_showimage:

                intent.setAction(android.content.Intent.ACTION_VIEW);

                intent.setDataAndType(

                        Uri.fromFile(new File("mnt/sdcard/Download/landscape.jpg")),

                        "image/*");

                break;

            case R.id.button_main_showtext:

                intent.setAction(android.content.Intent.ACTION_VIEW);

                intent.setDataAndType(

                        Uri.fromFile(new File("mnt/sdcard/Download/info.txt")),

                        "text/*");

                break;

            case R.id.button_main_playaudio:

                intent.setAction(android.content.Intent.ACTION_VIEW);

                intent.setDataAndType(Uri.fromFile(new File(

                        "mnt/sdcard/Download/heavencity.mp3")), "audio/*");

                break;

            case R.id.button_main_playvideo:

                intent.setAction(android.content.Intent.ACTION_VIEW);
                String type = "video/mp4";
                Uri uri = Uri.parse("file:///storage/emulated/0/Pictures/Screenshots/qqq.mp4");

                intent.setDataAndType(uri,type);

                break;

            case R.id.button_main_home:

                intent.setAction("android.intent.action.MAIN");

                intent.addCategory("android.intent.category.HOME");

                break;

            default:

                break;

        }

        startActivity(intent);

    }
}

AndroidManifest.xml中需要打电话的权限

 <uses-permission android:name="android.permission.CALL_PHONE"/>

layout文件

<?xml version="1.0" encoding="utf-8"?>
<ScrollView

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

    android:id="@+id/scrollView1"

    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical">

        <Button

            android:id="@+id/button_main_call"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="直接拨号" />


        <Button

            android:id="@+id/button_main_dial"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="启动拨号面板" />


        <Button

            android:id="@+id/button_main_dialer"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="显示拨号面板" />


        <Button

            android:id="@+id/button_main_sms"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="发送短信" />


        <Button

            android:id="@+id/button_main_setting"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="系统设置" />

        <Button

            android:id="@+id/button_main_datesetting"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="日期设置" />

        <Button

            android:id="@+id/button_main_soundsetting"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="声音设置" />

        <Button

            android:id="@+id/button_main_wifisetting"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="WIFI设置" />

        <Button

            android:id="@+id/button_main_web"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="浏览网页" />

        <Button

            android:id="@+id/button_main_contacts"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="查看联系人" />

        <Button

            android:id="@+id/button_main_showimage"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="查看图片" />

        <Button

            android:id="@+id/button_main_showtext"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="查看文本" />

        <Button

            android:id="@+id/button_main_playvideo"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="播放视频" />

        <Button

            android:id="@+id/button_main_playaudio"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="播放音频" />

        <Button

            android:id="@+id/button_main_home"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="clickButton"

            android:text="HOME" />


    </LinearLayout>

</ScrollView>
上一篇 下一篇

猜你喜欢

热点阅读