Android之Intent

12 篇文章 0 订阅

一个Intent就是一次对将要执行的操作的抽象描写。程序跳转和传递参数的时候,我们都会使用Intent。

1、实现点击按钮拨打电话:
在content_main.xml里添加Button,

<Button
        android:id="@+id/mainBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Call"
        />

在MainActivity.java里,

package com.hui.intentdemo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button mainBtn=null;

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

        mainBtn=(Button)findViewById(R.id.mainBtn);
        mainBtn.setOnClickListener(listener);
    }

    private View.OnClickListener listener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent();
            intent.setAction(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:110"));
            startActivity(intent);
        }
    };
}

此时运行时,点击按钮会有异常,发现是权限问题,需要在AndroidManifest.xml设置所需权限,

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hui.intentdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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



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

</manifest>

此时运行模拟器点击按钮,就可以打电话了。

2、实现点击按钮发送短信:
在content_main.xml里添加Button,

<Button
        android:id="@+id/mainBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Call"
        />

在MainActivity.java里,

package com.hui.intentdemo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button mainBtn=null;

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

        mainBtn=(Button)findViewById(R.id.mainBtn);
        mainBtn.setOnClickListener(listener);
    }

    private View.OnClickListener listener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent();
            intent.setAction(Intent.ACTION_SENDTO);
            intent.setData(Uri.parse("smsto:5554"));
            intent.putExtra("sms_body","Welcome to ....");
            startActivity(intent);
        }
    };
}

在AndroidManifest.xml添加权限,

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hui.intentdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

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


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

</manifest>

点击按钮后,直接跳到短信发送界面,手机号码和短信内容已经填写完毕,只需点发送即可。
注意:intent的putExtra中的“sms_body”不是随便取的。

3、启动新的Activity:
之前的操作只有一个Activity,但在实际应用中,会有很多Activity。
如何从一个Activity跳到另一个Activity,这就需要用到Intent。
点击MainActivity跳转到SecondActivity:
新建java类SecondActivity.java,新建second.xml,
second.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.hui.intentdemo.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:id="@+id/secondTxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Second" />

    <Button
        android:id="@+id/secondBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Second"
        />
</RelativeLayout>

MainActivity代码:

package com.hui.intentdemo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button mainBtn=null;

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

        mainBtn=(Button)findViewById(R.id.mainBtn);
        mainBtn.setOnClickListener(listener);
    }

    private View.OnClickListener listener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent=new Intent();
            intent.setClass(MainActivity.this,SecondActivity.class);
            intent.putExtra("str","Intent Demo");
            startActivity(intent);
        }
    };
}

SecondActivity代码:

package com.hui.intentdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

/**
 * Created by Administrator on 2016/4/6.
 */
public class SecondActivity extends AppCompatActivity {

    private TextView secondTxt;

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

        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();
        String str=bundle.getString("str");
        secondTxt=(TextView)findViewById(R.id.secondTxt);
        secondTxt.setText(str);
    }
}

此时是不成功的,因为没有找到SecondActivity,需要在AndroidManifest.xml注册SecondActivity,

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hui.intentdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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



<activity android:name=".SecondActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> </activity> </application>
------------------------------------------------------------------------

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

此时才能成功运行。

4、实现从MainActivity.java传参数给SecondActivity.java,以及从SecondActivity.java传参数给MainActivity.java:
修改3中的MainActivity.java和SecondActivity.java,

MainActivity.java代码:

package com.hui.intentdemo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button mainBtn=null;
    private final static int REQUEST_CODE=1;

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

        mainBtn=(Button)findViewById(R.id.mainBtn);
        mainBtn.setOnClickListener(listener);
    }

    private View.OnClickListener listener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent=new Intent();
            intent.setClass(MainActivity.this,SecondActivity.class);
            intent.putExtra("str","Intent Demo");
            startActivityForResult(intent,REQUEST_CODE);
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode==REQUEST_CODE){
            if(resultCode==SecondActivity.RESULT_CODE){
                Bundle bundle=data.getExtras();
                String str=bundle.getString("back");
                Toast.makeText(MainActivity.this,str,Toast.LENGTH_LONG).show();
            }
        }
    }
}

SecondActivity.java代码:

package com.hui.intentdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by Administrator on 2016/4/6.
 */
public class SecondActivity extends AppCompatActivity {

    private TextView secondTxt;
    private Button secondBtn;
    public final static int RESULT_CODE=1;

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

        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();
        String str=bundle.getString("str");
        secondTxt=(TextView)findViewById(R.id.secondTxt);
        secondTxt.setText(str);

        secondBtn=(Button)findViewById(R.id.secondBtn);
        secondBtn.setOnClickListener(listener);
    }
    private View.OnClickListener listener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent();
            intent.putExtra("back","BACK DATA");
            setResult(RESULT_CODE,intent);
            finish();
        }
    };
}

此时运行模拟器,点击MainActivity的按钮,MainActivity会跳转到SecondActivity,并将str的值传给SecondActivity。当点击SecondActivity的按钮后,会跳转到MainActivity,并将back的值传给MainActivity。


注:在java里面常量要用大写,这是为了区别于变量的小写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值