Intent的用法知識總結

Intent

在Android中Intent非常常用,是個強大的本地交互工具。

Intent是什麼?

英文翻譯爲“意圖”,我理解爲可以攜帶數據的指令。

能幹嘛?比如:

  • 微信支付成功後會跳轉回原來的頁面並提示已經支付成功

  • 分享功能,點擊分享會出現朋友圈,微博的選擇界面給你選擇並分享內容

知識點總結

一.Activity之間的頁面跳轉

Intent i = new Intent(本頁面.this,需要跳轉的頁面.class);
startActivity(i);

二.App頁面的數據傳輸

數據傳輸

  • 放入數據

    private static final String TAG ="Mainactivity" //先自定義一個值爲Mainactivity的String常量
           .......
    Intent i = new Intent(本頁面.this,需要跳轉的頁面.class);
    i.putExtra(TAG,數據);  //添加標識字符串和數據值
    startActivity(i)   
    
  • 跳轉的頁面獲取數據

    Intent i = getIntent();
    String str = i.getStringExtra("Mainactivity"); //通過分析值來分析常量名再來分析攜帶的數據,提高數據的安全性
    

三.數據傳輸並能返回結果

  • startActivityForResult啓動

    pravate fianl static int Code = 0; //自定義一個int數值
        ......
    Intent i = new Intent(本頁面.this,需要跳轉的頁面.class);
    i.putExtra(TAG,數據);
    startActivityForResult(i,Code); //添加一個識別代碼,用來識別是從那個頁面返回的數據
    
  • 跳轉的頁面獲取數據並用setResult返回結果值

    pravate fianl static String RETURTAG = "return" //定義個返回的常量
          .......
    Intent i = getIntent();
    String str = i.getStringExtra(數據);
    Intent intent = new Intent();
    intent.putExtra(RETURTAG,數據);
    setResult(RESULT_OK,i); //返回一個int類型的RESULT_OK結果值
    
  • 主頁面重寫onActivityResult

    protect void onActivityResult(int requetCode,int resultCode,Intent data){
      if(requestCode == code){   //如果要求的requestCode和此頁面的Code對應
    if(resultCode == RESULT_OK) //如果結果值成功
        ......    //執行操作
    }
    

四.不同應用之間的交互

  • 分享文本信息給其他應用

    Intent i = new Intent();
    i.putExtra(Intent.EXTRA_TEXT, 數據);  //使用Intent自帶的String常量攜帶數據
    i.setAction(Intent.ACTION_SEND);  //設置行爲信息           
    i.setType("text/plain");    //設置傳送數據種類
    startActivity(i);
    
  • 分享圖片

    i.putExtra(Intent.EXTRA_STREAM, uriToImage); //uriToImage爲圖片鏈接
    i.setType("image/jpeg");
    
  • 發送多塊內容

    ArrayList<Uri> imageUris = new ArrayList<Uri>();
    imageUris.add(imageUri1); // 添加你的圖片地址
    imageUris.add(imageUri2)
    .........
    i.setAction(Intent.ACTION_SEND_MULTIPLE);
    i.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
    i.setType("image/*");
    ........
    
  • 可以在startActivit``中createChooser`自定義選擇程序界面的標題

    startActivity(Intent.createChooser(i,"選擇你要啓動的程序"))
    

五.Intent接收其他程序的數據並處理

  • 清單文件在<activity>中添加<intent-filter>

    <intent-filter >
        <action android:name="android.intent.action.SEND"/> //匹配接收的行爲信息值
          <category android:name="android.intent.category.DEFAULT"/> //匹配類型,此處爲默認值,Intent.ACTION_SEND屬於默認值
          <data android:mimeType="text/plain"/> //匹配數據類型
    </intent-filter>     
    
  • 處理接收到的數據

    此處要注意避免在UI線程中處理獲取到的數據

      protected void onCreate(Bundle savedInstanceState) {
      .......
     Intent i =getIntent();
     String action =i.getAction();
     String type=i.getType();
    //若從Intent中取得的行爲信息和數據種類相對應,執行方法handIntent
    if(Intent.ACTION_SEND.equals(action) && type != null){
      if("text/plain".equals(type)){
         handIntent(i);
      }
    } }
      ......
    public void handIntent(Intent i){
     String str = i.getStringExtra("Intent.EXTRA_TEXT");
       // 執行UI更新操作
      }
    

六.示例:發送一段文字顯示在另一個APP上

寫一段文字發送

選擇接收的APP,選擇IntentFilter

在接收頁面顯示你輸入的文字

示例代碼

  • test的代碼

    MainActivity.

    protected void onCreate(Bundle savedInstanceState) {
           ......
    Button button = (Button)findViewById(R.id.button2);
    EditText et = (EditText)findViewById(R.id.editText1);
     button.setOnClickListener(new OnClickListener() {  
     public void onClick(View v) {
            // TODO Auto-generated method stub
           String sentText = et.getText().toString();
           Intent i = new Intent();
           i.setAction(Intent.ACTION_SEND);
           i.putExtra(Intent.EXTRA_TEXT, sentText);
           i.setType("text/plain");
           startActivity(i);                   
        }
    });
    }
    
  • IntentFilter的代碼

    MainActivity.

    protected void onCreate(Bundle savedInstanceState) {
      .......
    TextView text = (TextView)findViewById(R.id.text);      
    Intent i =getIntent();
    String action =i.getAction();
    String type=i.getType();
     if(Intent.ACTION_SEND.equals(action) && type != null){
          if("text/plain".equals(type)){
         handIntent(i);
      }
    }}
    ..........
    //定義個處理接收數據的方法
    public void handIntent(Intent i){
    String getText = i.getStringExtra(Intent.EXTRA_TEXT);
    if (getText != null){
    text.setText(getText);
    }
    

    清單文件.

     <intent-filter >
      <action android:name="android.intent.action.SEND"/>
      <category android:name="android.intent.category.DEFAULT"/>
      <data android:mimeType="text/plain"/>
     </intent-filter>
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章