隐式intent 学习

先导理解部分

        Android系统中,使用显式intent,用户需要指定启动的activity类,操作系统才能负责启动他,而在隐式intent,只要用户描述要完成的任务,操作系统就能自动的找到合适的应用,并在其中启动相应的activity。

显式intent实例

        Intent intent =  new Intent(getActivity(),CrimePagerActivity.class);
        intent.putExtra(EXTRA_CRIME_ID,crimeId);
        startActivity(intent);

隐式intent主要组成部分

(1).要执行的操作

       通常以Intent类中的常量来表示。例如,要访问某个URL,可以使用Intent.ACTION_VIEW;要发送邮件,可以使用Intent.ACTION_SEND。

(2).待访问数据的位置

        这可能是设备以外的资源如某个网页的URL,也可能是指向某个文件的URL,或者是指向ContentProvider中某条记录的某个内容URL(content URL)。

(3).操作涉及的数据类型

        这指的是MIME形式的数据类型,如text/html或audio/mpeg3.如果一个intent包含数据位置,那么通常可以从中推测出数据的类型。

(4).可选类别

        操作用于描述具体要做什么,而类别通常用来描述你打算何时、何地或者如何使用某个activity。例如,Android的android.intent.category.LAUNCHER类别表明,activity应该显示在顶级应用启动器中,而android.intent.category.INFO类别表明,虽然activity向用户显示了包含信息,但它不应该出现在启动器中。

隐式Intent实例

发送一段文本信息,隐式intent的操作是ACTION_SEND。不指向任何数据,也不包含任何类别,但会指定数据类型是text/plain

private Crime mCrime;
    private EditText mTitleField;
    private Button mDateButton;
    private CheckBox mSolvedCheckbox;
    private Button mReportButton;
    ...
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
        ...
        
        mReportButton = (Button)v.findViewById(R.id.crime_report);
        mReportButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("text/plain");
                i.putExtra(Intent.EXTRA_TEXT,getCrimeReport());
                i.putExtra(Intent.EXTRA_SUBJECT,getString(R.string.crime_report_subject));
                startActivity(i);
            }
        });
        return v;
    }

隐式Intent几个存在的问题

1.由于Activity可能被别的应用系统应用,所以需要注意命名上的问题,防止应用程序之间相互影响。

2.在用一个Activity处理多个Action的情况下,可能出现处理不当的情况。

3.对于一个Action字符串,可能出现找到一个Activity,多个Activity,一个都没有处理的情况发生。

        1).一个Activity 可以使用

        2).多个Activity,系统需要提示哪一个Activity打开

        3).一个都没有,则需要提示报错

猜你喜欢

转载自blog.csdn.net/qq_38582588/article/details/80787488