您的位置:首页 > 移动开发 > Android开发

android中的Activity和Intent

2015-08-19 19:56 519 查看

概述

1.android的四大组件分别是:Activity、service、ContentProvider、Broadcast。

2.Intent:android中进行通讯的工具,类似java中的包裹。

3.Intent的五个常用方法是:

b)、component:从一个活动中启动另一个活动。

a)、action:

setAction(XXX)-闯入某种ACTION。

setData(Uri):执行相应的功能。

c)、data

d)、type

e)、extras

4.Intent启动活动的三种方式:

a)、直接启动Activity

Intent intent = new Intent(本活动名.this,要启动的活动名.class)

startActivity(intent);

b)、带有返回值的启动

* 第一个界面:调用startActivityForResult(intent,requestCode);

* 第二个界面先调用getIntent()得到要启动的intent;

* 在关闭第二个界面前先封装数据,调用intent.putExtra(key,value),设置resultCode-setResultCode(RESULT_OK,intent),接着调用finish()关闭第二个界面。

* 第一个界面重写onActivityResult()方法,准备接收数据,接收数据时,先判断resultCode。

c)、隐式启动

* 将要启动的活动在manifest中注册,添加intent-filter,在intent-fileter中务必添加action,action的name自定,然后设置category必须为default。

* 在启动界面中使用intent设置action。

代码

Intent的三种启动活动的方法

component直接启动

用component启动活动的方法(现在比较少用):

Intent intent = new Intent();
        ComponentName componentName = new ComponentName(SecondActivity.this,MainActivity.class);
        intent.setComponent(componentName);
        startActivity(intent);


可以用另一种更简单的方法代替:

Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(intent);


带有返回参数的启动方式

主活动:

public class MainActivity extends Activity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button)findViewById(R.id.button_back);
        //点击按钮启动另一个活动SecondActivity
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
                startActivityForResult(intent, 0x23);
            }
        });
    }
    /*
     *用于接收数据
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);          //判断resultCode是否符合
        if(resultCode==RESULT_OK){
            textView.setText(data.getStringExtra("back_data").toString());
        }
    }

}


被启动的活动:

public class SecondActivity extends Activity {
    private Button button;
    private EditText editText;
    private Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_2);
        button = (Button)findViewById(R.id.button_return);
        editText = (EditText)findViewById(R.id.edit);
        intent = new Intent();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent.putExtra("back_data",editText.getText().toString());
                setResult(RESULT_OK,intent);
                SecondActivity.this.finish();
            }
        });
    }
}


布局:

activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              tools:context=".MainActivity">
    <Button
        android:id="@+id/button_back"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="进入第二个页面"/>

</LinearLayout>


layout_2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入数据"/>

    <Button
        android:id="@+id/button_return"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送"/>
</LinearLayout>


隐式启动方式

intent.setAction("android.intent.action.test");
    startActivity(intent);


manifest中添加的部分

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ......
    <application
        ......
        <activity
            android:name="com.example.administrator.myapplication.SecondActivity"
            android:theme="@style/AppTheme"
            android:label="the first" >
            <intent-filter>
                <action android:name="android.intent.action.test" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

    </application>

</manifest>


Intent中的action

public class TestIntentAction extends Activity implements View.OnClickListener{
    private Button mBtnDial;
    private Button mBtnCall;
    private Button mBtnSms;
    private Button mBtnView;
    private EditText mEditSms;
    private Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_intent_action);
        mEditSms = (EditText)findViewById(R.id.edit_sms);
        mBtnDial = (Button)findViewById(R.id.dial_btn);
        mBtnCall = (Button)findViewById(R.id.call_btn);
        mBtnSms = (Button)findViewById(R.id.send_btn);
        mBtnView = (Button)findViewById(R.id.view_btn);
        mBtnDial.setOnClickListener(this);
        mBtnCall.setOnClickListener(this);
        mBtnSms.setOnClickListener(this);
        mBtnView.setOnClickListener(this);
        intent = new Intent();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.dial_btn:
                //打开打电话的界面
                intent.setAction(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:15634219694"));
                startActivity(intent);
                break;
            case R.id.call_btn:
                //直接拨打电话
                intent.setAction(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:15634219694"));
                startActivity(intent);
                break;
            case R.id.send_btn:
                //进入发送信息的界面
                intent.setAction(Intent.ACTION_SENDTO);
                intent.setData(Uri.parse("smsto:15634219694"));
                mEditSms.setText("");
                startActivity(intent);
                break;
            case R.id.view_btn:
                //进入浏览器
                intent.setAction(Intent.ACTION_VIEW);
               intent.setData(Uri.parse("http://www.baidu/com"));
                startActivity(intent);
                break;
            default:
                break;
        }
    }
}


以上代码中ACTION_PHONE需要申请权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ......
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    ......
</manifest>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: