android學習筆記12--------------隱性Intent

來源:互聯網
上載者:User

Intent分為兩大類,顯性的(Explicit )的和隱性的(Implicit)。在前面的例子中,我們在兩個Activity之間跳轉時初

步使用了Intent類,當時是用setClass來設定 Intent的發起方與接收方,它被稱為顯性的Intent,而隱性的Intent則不

需要用setClass或setComponent來指

定事件處理器,利用AndroidMenifest.xml中的配置就可以由平台定位事件的消費者。

  一般來說,intent要定位事件的目的地,無外乎需要以下幾個資訊:

1.種類(category),比如我們常見的 LAUNCHER_CATEGORY 就是表示這是一類應用程式。

2.類型(type),在前面的例子中沒用過,表示資料的類型,這是隱性Intent定位目標的重要依據。

3.組件(component),前面的例子中用的是setClass,不過也可以用setComponent來設定intent跳轉的前後兩個類

執行個體。

4.附加資料(extras),在ContentURI之外還可以附加一些資訊,它是Bundle類型的對象。

       隱式Intent和顯式Intent什麼時候使用。

1.顯式意圖:用於軟體內部通訊

2.隱式意圖:用於軟體之間通訊(如調用撥號器打電話)

下面是一個隱式意圖的例子,兩個Activity之間切換,通過隱式意圖實現:

 



 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
 
public class MainActivity extends Activity 

    Button button; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        button=(Button)findViewById(R.id.goSecondActivity); 
        button.setOnClickListener(new OnClickListener() 
        {            
            @Override 
            public void onClick(View v) 
            { 
                Intent intent=new Intent("com.luku",Uri.parse("something://xxx")); 
                intent.putExtra("age", 24); 
                MainActivity.this.startActivity(intent); 
                 
                //Intent intent=new Intent(MainActivity.this, SecondActivity.class);  
                //intent.putExtra("age", 24);  
                //MainActivity.this.startActivity(intent);  
            } 
        }); 
         
    } 

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity
{
 Button button;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  button=(Button)findViewById(R.id.goSecondActivity);
  button.setOnClickListener(new OnClickListener()
  {   
   @Override
   public void onClick(View v)
   {
    Intent intent=new Intent("com.luku",Uri.parse("something://xxx"));
    intent.putExtra("age", 24);
    MainActivity.this.startActivity(intent);
    
    //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
    //intent.putExtra("age", 24);
    //MainActivity.this.startActivity(intent);
   }
  });
  
 }
}

 

[java]
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
 
public class SecondActivity extends Activity 

    Button button; 
    TextView textView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.second); 
         
        Intent intent=this.getIntent(); 
        int age=intent.getIntExtra("age", 0); 
         
        textView=(TextView)findViewById(R.id.textView); 
        textView.setText("接收到的資料:"+'\n'+"age:"+age); 
         
        button=(Button)findViewById(R.id.backMainActivity); 
        button.setOnClickListener(new OnClickListener() 
        {            
            @Override 
            public void onClick(View v) 
            { 
                SecondActivity.this.finish(); 
                 
            } 
        }); 
         
    } 
         

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends Activity
{
 Button button;
 TextView textView;
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.second);
  
  Intent intent=this.getIntent();
  int age=intent.getIntExtra("age", 0);
  
  textView=(TextView)findViewById(R.id.textView);
  textView.setText("接收到的資料:"+'\n'+"age:"+age);
  
  button=(Button)findViewById(R.id.backMainActivity);
  button.setOnClickListener(new OnClickListener()
  {   
   @Override
   public void onClick(View v)
   {
    SecondActivity.this.finish();
    
   }
  });
  
 }
  
}

main.xml

[java]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="MainActivity" 
    /> 
<Button  
    android:text="進入SecondActivity"  
    android:id="@+id/goSecondActivity"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"></Button> 
     
</LinearLayout> 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="MainActivity"
    />
<Button
 android:text="進入SecondActivity"
 android:id="@+id/goSecondActivity"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"></Button>
 
</LinearLayout>
 

 

second.xml

[java]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="SecondActivity" 
    /> 
     
<TextView  
    android:id="@+id/textView"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"></TextView> 
     
<Button  
    android:text="返回MainActivity"  
    android:id="@+id/backMainActivity"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"></Button> 
     
</LinearLayout> 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="SecondActivity"
    />
   
<TextView
 android:id="@+id/textView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"></TextView>
 
<Button
 android:text="返回MainActivity"
 android:id="@+id/backMainActivity"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"></Button>
 
</LinearLayout>

 

重要的是再AndroidManifest.xml中設定隱式Intent的參數

[java]
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.luku.Intent" 
      android:versionCode="1" 
      android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
        <activity android:name=".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=".SecondActivity" 
                  android:label="@string/app_name" > 
                   
              <intent-filter> 
                 <action android:name="com.luku"/> 
                 <category android:name="android.intent.category.DEFAULT"/> 
                 <data android:scheme="something"/> 
              </intent-filter> 
               
        </activity> 
    </application> 
</manifest> 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.luku.Intent"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".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=".SecondActivity"
      android:label="@string/app_name" >
     
     <intent-filter>
       <action android:name="com.luku"/>
       <category android:name="android.intent.category.DEFAULT"/>
       <data android:scheme="something"/>
     </intent-filter>
    
  </activity>
    </application>
</manifest>

 

<intent-filter>中設定各項參數。在new Intent的時候要相互匹配。

實質是:MainActivity中new一個自己定義的Intent,並在AndroidManifest.xml中指定實現Intent的Activity

 摘自 奔跑的蝸牛

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.