還是,筆記僅爲供自己學習記錄,如果有幸對看官產生幫助,我會很榮幸
Intent 意圖
Intent是什麼?它是連接應用程序的三個核心組件--Activity、Service和BroadcastReceiver的橋樑,完成組件之間的調用,在組件之間傳遞信息。
當不同組件之間要交流時,需要用Intent來對其中涉及到的行動,動作及涉及到的數據進行描述、傳遞。
Intent對象,由組件名稱,以及Action、Data、Category、Extra和Flag幾部分組成。
- 要處理該Intent的組件名稱。
- Action行動:一個字符串,用於命名要採取的行動
- Data數據:執行動作要操作的數據,用指向數據的一個URL來表示。例如指向某聯繫人的URL爲:content://contacts/1
- category類別:被執行動作的附加信息
- type數據類型:強制指定數據的類型
- extras附加信息:其他所以附加信息的集合
- flag標誌:Android系統啓動一個Acitvity以及Activity啓動後對其進行數據處理
Intent的分類:Intent有直接意圖和間接意圖兩種方式。
(1)直接意圖:指定了要調用的組件,一般用在應用程序的內部,或者明確知道組件的名稱。如
Intent i = new Intent(this,ActivitySec.class);
//表明了當前組件(this),到類ActivitySec的直接意圖
(2)間接意圖:沒有指定具體組件,這些Intent包含足夠的信息,系統根據這些信息,在所有可用的組件中,確定滿足此Intent的組件。例如是調用照相機,還是打開瀏覽器等等
Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
startActivity(intent);
例如上述例子,則是跳轉到網址百度的,那麼系統將會自動檢測,判斷出打開瀏覽器,從而進入百度頁面
此外,還有其他的模糊意圖
瀏覽網頁:
intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://developer.android.com"));
打電話:
intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:(+86)10086"));
撥號:
intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:(+86)10086"));
發短信:
intent = new Intent(Intent.ACTION_VIEW);
intent.putExtre("sms_body","The SMS text");
intent.setType("vnd.android-dir/mms-sms");
啓動照相機
intent = new Intent("android.media.action.IMAGE_CAPTURE");
不過,在使用過程中,都要進行註冊,一定的權限,下面是常用的:
上網權限
<uses-permission android:name="android.permission.INTRNET">
使用照相機的權限
<uses-permission android:name="android.permission.CAMERA">
發短信的權限
<uses-permission android:name="android.permission.SEND_SMS">
打電話的權限
<uses-permission android:name="android.permission.CALL_PHONE">
寫短信的權限
<uses-permission android:name="android.permission.WRITE_SMS">
Intent 直接意圖和間接意圖舉例
接下來,來嘗試一下幾種不同的跳轉方式
界面文檔我就不貼了,直接發圖:
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view) {
// TODO Auto-generated method stub
switch(view.getId()){
//button1是跳轉到新的界面
case R.id.button1:
Intent intent_two = new Intent(MainActivity.this,TwoActivity.class);
startActivity(intent_two);
break;
//button2是帶信息跳轉到新的界面
case R.id.button2:
Intent intent_three = new Intent(MainActivity.this,ThirdActivity.class);
intent_three.putExtra("text1", "這是第二個Activity");
startActivity(intent_three);
break;
//button3是帶有返回值的跳轉,當跳回主界面的時候,會toast出所返回的信息
case R.id.button3:
Intent intent_four = new Intent(MainActivity.this,FourActivity.class);
startActivityForResult(intent_four, 1);
break;
/*
*通過間接意圖來實現跳轉到另一應用的指定界面(瀏覽器界面)
*/
case R.id.button4:
Intent intent_five = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
//當識別出http://時,會默認打開瀏覽器
startActivity(intent_five);
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1&&resultCode==2){
String backData=data.getStringExtra("name");
Toast.makeText(MainActivity.this,backData,0).show();
}
}
}
TwoActivity.java,對應第一種跳轉
public class TwoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
}
}
ThirdActivity,對應第二種跳轉,帶信息跳轉到新的頁面
public class ThirdActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.third_activity);
TextView tv=(TextView)findViewById(R.id.third_textView1);
String str=this.getIntent().getExtras().getString("text1");
}
}
ForthActivity.java,對應有返回值的跳轉,在這個界面來存入信息,當跳回主界面時會toast出剛剛輸入的信息。
public class FourActivity extends Activity implements OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.forth_activity);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
EditText edi_name=(EditText) findViewById(R.id.forth_editText1);
EditText edi_pwd=(EditText) findViewById(R.id.forth_editText2);
String s="用戶名是:"+edi_name.getText().toString()+"密碼是:"+edi_pwd.getText().toString();
intent.putExtra("name", s);
setResult(2,intent);
finish();
}
}