Android之Intent

来源:互联网 发布:java web完整项目源码 编辑:程序博客网 时间:2024/05/29 15:41

一个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里面常量要用大写,这是为了区别于变量的小写。

0 0
原创粉丝点击