Android学习笔记---Intent

Android 中 Intent学习记录

Intent的作用:

     Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity 或者service,所以可以将intent理解成activity之间的粘合剂。

1.Intent 拨打电话  和  发送短信

前台布局源码:

<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" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="电话号码 :" />
    <EditText android:id="@+id/txt_phone"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:text="13621614475"/>
    <Button android:id="@+id/btn_call"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="拨打电话"/>
    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="短信内容"/>
    <EditText android:id="@+id/txt_message"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="shanghai"/>
    <Button android:id="@+id/btn_GSM"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="发送短信"/>
</LinearLayout>

 

后台文件拨号  及 短信发送:

private EditText txt_phone=null;
    private EditText txt_message=null;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        //电话号码
        txt_phone=(EditText)findViewById(R.id.txt_phone);
        //拨打电话
        Button btn_call=(Button)findViewById(R.id.btn_call);
        btn_call.setOnClickListener(listener);
        //短信内容
        txt_message=(EditText)findViewById(R.id.txt_message);
        //发送短信
        Button btn_gsm=(Button)findViewById(R.id.btn_GSM);
        btn_gsm.setOnClickListener(listener);
        
        
    }
   private OnClickListener listener=new OnClickListener(){

    @Override
    public void onClick(View view)
    {
        
        Button btn=(Button)view;
        
        switch (btn.getId())
        {
        case R.id.btn_call:
        {
            Intent intent=new Intent();
            intent.setAction(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:"+txt_phone.getText()));
            startActivity(intent);
            
        }
        break;
        case R.id.btn_GSM:
        {
            Intent intent=new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:5554"));
            intent.putExtra("sms_body",txt_message.getText().toString());
            startActivity(intent);
        }
        default:
            break;
        }
    }};

注意:必须要在配置文件中添加一些两句声明,不然的话会发送错误。 在<application>的外面添加 以下两句声明

<!-- 拨打电话 -->
<uses-permission android:name="android.permission.CALL_PHONE"/>
<!-- 发送短信 -->
<uses-permission android:name="android.permission.SEND_SMS"/>

整天效果图:   点击:拨打电话按钮   图 

点击 发送短信按钮 图为:

2.Intent 启动Activity  及 向一个新的Activity 传值。

源码:

//启动一个Activity 
        Button btn_startSecond=(Button)findViewById(R.id.btn_startSecond);
        btn_startSecond.setOnClickListener(listenerStartSecond);
private OnClickListener listenerStartSecond=new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            Intent intent=new Intent(MainActivity.this,SecondActivity.class);
            intent.putExtra("Name", "张三");
            startActivity(intent);
            
        }
        
    };

启动的SecondActivity 中 获取传入的值:
布局源码:

<TextView
        android:id="@+id/tv_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />
    
    <Button android:id="@+id/btn_second"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Second"/>

获取值 后台源码:

private TextView tv_info=null;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent=getIntent();
        
        Bundle bundle=intent.getExtras();
        String name=bundle.getString("Name");
        tv_info=(TextView)findViewById(R.id.tv_info);
        tv_info.setText(name);
        
    }

注意:在AndroidMainfest.xml 中添加 要启动的SecondActivity的声明: 在 <application>的内部添加如下声明

 <!-- 启动一个Activity 在此声明要启动的Activity -->
        <activity
            android:name="com.example.intent2.SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>

2.1 在SecondActivity关闭时,返回参数并传值给 mainActivity的处理:

 MainActivity后台源码:

        //启动一个Activity 
        Button btn_startSecond=(Button)findViewById(R.id.btn_startSecond);
        btn_startSecond.setOnClickListener(listenerStartSecond);
//定一个常量
    public final static int REQUESTCODE=1;
    private OnClickListener listenerStartSecond=new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            Intent intent=new Intent(MainActivity.this,SecondActivity.class);
            intent.putExtra("Name", "张三");
            //启动一个Activity
            //startActivity(intent);
            MainActivity.this.startActivityForResult(intent, REQUESTCODE);
            
            
        }
        
    };
    //覆盖次方法  用与获取 SecondActivity 在结束时  获取参数的返回值
   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode==REQUESTCODE)
        {
            if(resultCode==SecondActivity.RESULTCODE)
            {
                Bundle bundle=data.getExtras();
                String backData=bundle.getString("Back");
                Toast.makeText(MainActivity.this, backData, Toast.LENGTH_LONG).show();
                
            }
        }
    }

SecondActivity源码:

private TextView tv_info=null;
    private Button btn_startSencond=null;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent=getIntent();
        
        Bundle bundle=intent.getExtras();
        String name=bundle.getString("Name");
        tv_info=(TextView)findViewById(R.id.tv_info);
        tv_info.setText(name);
        
        btn_startSencond=(Button)findViewById(R.id.btn_second);
        btn_startSencond.setOnClickListener(listener);
    }
    public final static int RESULTCODE=1;
    //返回参数值
    private OnClickListener listener=new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            Intent intent=new Intent();
            intent.putExtra("Back", "SecondActivity:参数返回值");
            //设置参数返回值
            SecondActivity.this.setResult(RESULTCODE, intent);
            //结束SecondActivity
            finish();
        
        }
        
    };

配置文件别忘记添加:

 <!-- 启动一个Activity 在此声明要启动的Activity -->
        <activity
            android:name="com.example.intent2.SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>

 

效果图:  点击Second按钮  返回MainActivity 并传递返回值:

2.2 调出拨号程序:

public void onClick(View v)
        {
            Uri uri = Uri.parse("tel:");  
            Intent intent = new Intent(Intent.ACTION_DIAL, uri);  
            startActivity(intent);  
            
        }

效果图:

2.3 调用短信程序:

@Override
        public void onClick(View v)
        {
            Uri uri = Uri.parse("smsto:");  
            Intent intent=new Intent();
            intent.putExtra("sms_body", "The SMS text");   
            intent.setType("vnd.android-dir/mms-sms");  
            startActivity(intent);  
            
        }
        

效果图:

2.4 发送Email 邮件

  1. Uri uri = Uri.parse("mailto:xxx@abc.com");  
   2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
   3. startActivity(it); 


   1. Intent it = new Intent(Intent.ACTION_SEND);  
   2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");  
   3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");  
   4. it.setType("text/plain");  
   5. startActivity(Intent.createChooser(it, "Choose Email Client")); 


   1. Intent it=new Intent(Intent.ACTION_SEND);    
   2. String[] tos={"me@abc.com"};    
   3. String[] ccs={"you@abc.com"};    
   4. it.putExtra(Intent.EXTRA_EMAIL, tos);    
   5. it.putExtra(Intent.EXTRA_CC, ccs);    
   6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");    
   7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");    
   8. it.setType("message/rfc822");    
   9. startActivity(Intent.createChooser(it, "Choose Email Client"));


   1. //传送附件
   2. Intent it = new Intent(Intent.ACTION_SEND);  
   3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
   4. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");  
   5. sendIntent.setType("audio/mp3");  
   6. startActivity(Intent.createChooser(it, "Choose Email Client"));

 

本人写着这里。希望阅读者提出不足之处,互相学习提高。

 

 

 

 

posted @ 2013-11-25 22:15    阅读(580)  评论(0编辑  收藏  举报