編輯:Android開發實例
Intent,又稱為意圖,是一種運行時綁定機制,它能在程序運行的過程中鏈接兩個不同的組件(Activity、Service、BroadcastReceiver)。通過Intent,程序可以向Android表達某種請求或意願,Android會根據意願的內容選擇適當的組件來請求。
在這些組件之間的通訊中,主要是由Intent協助完成的。Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將Intent傳遞給調用的組件,並完成組件的調用。因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調用者之間的解耦。
通過Intent請求Activity,必須在AndroidManifest.xml文件中對被請求的Activity新增標簽配置,否則會導致錯誤。 Intent一般包含兩個主要信息,action、data。
通過一個例子來展示Activity中使用Intent導向新Activity並傳遞數據。此程序僅在兩個頁面之間相互跳轉,但是每次跳轉會創建新的Activity,所以在startActivity()之後需要調用finish()銷毀當前Activity,如果不銷毀,多次跳轉後,程序的Activity棧中會存放多個Activity,點擊設備的返回按鈕,會發現會一直向後退。
主要步驟:
示例代碼
步驟2--3:
- public class MainActivity extends Activity {
- private TextView textView;
- private Button btn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- textView=(TextView)findViewById(R.id.textView1);
- btn=(Button)findViewById(R.id.button1);
- btn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // Intent構造函數:Intent來源;Intent目的。
- Intent intent =new Intent(MainActivity.this,otherActivity.class);
- intent.putExtra("data", "當前是頁面2,信息來自頁面1");
- startActivity(intent);//啟動Activity
- finish();
- }
- });
- }
- }
步驟4--5:
- public class otherActivity extends Activity {
- private Button btn;
- private TextView textView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.other);
- textView=(TextView)findViewById(R.id.textView2);
- btn=(Button)findViewById(R.id.button2);
- //通過Activity.getIntent()獲取當前頁面接收到的Intent。
- Intent intent =getIntent();
- //getXxxExtra方法獲取Intent傳遞過來的數據
- String msg=intent.getStringExtra("data");
- textView.setText(msg);
- btn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent=new Intent(otherActivity.this,MainActivity.class);
- startActivity(intent);
- finish();
- }
- });
- }
- }
步驟7:
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="cn.bgxt.IntentForAc.MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".otherActivity"/>
- </application>
從Activity中返回數據
上面例子中只是介紹了Activity通過Intent傳遞數據,然而在實際應用中,不僅僅需要向Activity傳遞數據,而且要從Activity中返回數據,雖然返回數據和傳遞數據類似,但是還是有部分區別。
主要區別如下:
通過一個例子說明從Activity返回數據。此程序有兩個Activity,在MainActivity中輸入加法運算的計算數,跳轉到otherActivity中輸入計算結果,並在點擊返回後,把計算結果輸出到MainActivity中。
示例代碼
MainActivity:
- public class MainActivity extends Activity {
- private EditText one,two,result;
- private Button btn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- one=(EditText)findViewById(R.id.one);
- two=(EditText)findViewById(R.id.two);
- result=(EditText)findViewById(R.id.result);
- btn=(Button)findViewById(R.id.btnGo);
- btn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- int ione=Integer.parseInt(one.getText().toString());
- int itwo=Integer.parseInt(two.getText().toString());
- Intent intent=new Intent(MainActivity.this, otherActivity.class);
- intent.putExtra("one", ione);
- intent.putExtra("two", itwo);
- //啟動需要監聽返回值的Activity,並設置請求碼:requestCode
- startActivityForResult(intent, 1);
- }
- });
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- //當otherActivity中返回數據的時候,會響應此方法
- //requestCode和resultCode必須與請求startActivityForResult()和返回setResult()的時候傳入的值一致。
- if(requestCode==1&&resultCode==2)
- {
- int three=data.getIntExtra("three", 0);
- result.setText(String.valueOf(three));
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- }
otherActivity:
- public class otherActivity extends Activity {
- TextView tvShow;
- EditText etResult;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.other);
- tvShow=(TextView)findViewById(R.id.tvShow);
- etResult=(EditText)findViewById(R.id.etResult);
- Intent intent=getIntent();
- int a=intent.getIntExtra("one", 0);
- int b=intent.getIntExtra("two", 0);
- tvShow.setText(a+" + "+b+" = "+" ? ");
- Button btnResult=(Button)findViewById(R.id.btnReturn);
- btnResult.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //新聲明一個Intent用於存放放回的數據
- Intent i=new Intent();
- int result=Integer.parseInt(etResult.getText().toString());
- i.putExtra("three", result);
- setResult(2, i);//設置resultCode,onActivityResult()中能獲取到
- finish();//使用完成後結束當前Activity的生命周期
- }
- });
- }
- }
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我