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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章