Intent初级学习

1.什么是Intent??

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

        android intent负责程序跳转和传递数据。如果把Activity比作积木的话,那么Intent就是胶水。也就是把不同的继母粘连起来。或者说Activity是不同的手机屏幕,而intent就是把不同的手机屏幕粘连起来的胶水。


2.拨打电话

            Intent intent =new Intent();
            intent.setAction(Intent.ACTION_CALL);     //设置为拨打电话方式
            intent.setData(Uri.parse("tel:110"));      //设置电话号码
            startActivity(intent);

            只有上面的会抛出这样的异常:7-21 10:46:14.074: E/AndroidRuntime(282): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:110 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{45022230 282:com.alvin.intent.activity/10038} (pid=282, uid=10038) requires android.permission.CALL_PHONE

               为了安全,当需要上网,打电话,发短信需要在AndroidManifest.xml中配置相应权限。

                     在aplication节点外加<uses-permission android:name="android.permission.CALL_PHONE"/>

3.发送短信

            Intent intent =new Intent();
            intent.setAction(Intent.ACTION_SENDTO);     //设置为拨发短信方式
            intent.setData(Uri.parse("smsto:5554"));      //设置电话号码
            intent.putExtra("sms_body", "android is interesting, is it?"); //设置短信内容
            startActivity(intent);

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

4.实现Activity间跳转

           Intent intent = new Intent();
            intent.setClass(TestIntentActivity.this, SecondActivity.class);    //实现跳转
            startActivity(intent);

        只有上面代码会抛出异常:E/AndroidRuntime(396): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.alvin.intent.activity/com.alvin.intent.activity.SecondActivity}; have you declared this activity in your AndroidManifest.xml?

        需要在androidManifest.xml中声明:

      <activity
            android:label="Second"
            android:name=".SecondActivity" >
        </activity>

5.传递参数

           Intent intent = new Intent();
            intent.setClass(TestIntentActivity.this, SecondActivity.class);    //实现跳转
            intent.putExtra("str", "welcome to android world");
            startActivity(intent);


            setContentView(R.layout.second);
            Intent intent = getIntent();        //得到第一个传进来的的Intent
            Bundle bundle = intent.getExtras();       //的到Intent里的值
            String str = bundle.getString("str");
            label = (TextView)findViewById(R.id.label);
            label.setText(str);

6.返回参数

          startActivityForResult(intent, REQUEST_CODE);      //当一个Activity结束时,返回一个值

          protected void onActivityResult(int requestCode, int resultCode, Intent data) {      //当被调用Activity结束时,会调用该方法
        if (requestCode == REQUEST_CODE) {
            if (resultCode == SecondActivity.REQUEST_CODE) {
                Bundle bundle = data.getExtras();
                String str = bundle.getString("back");
                Toast.makeText(TestIntentActivity.this, str, Toast.LENGTH_LONG).show();
            }
        }
    }

    secondBtn = (Button)findViewById(R.id.secondBtn);
        secondBtn.setOnClickListener(listener);
    }
    
    private OnClickListener listener = new OnClickListener() {                    //当点击按钮时,被调用activity结束
        
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.putExtra("back", "Back Data");
            setResult(REQUEST_CODE, intent);   //Call this to set the result that your activity will return to its caller
            finish();
        }
    };


发布了18 篇原创文章 · 获赞 13 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章