1. 程式人生 > >Intent隱式跳轉活動開啟網頁

Intent隱式跳轉活動開啟網頁

Intent隱式開啟網頁

1.實驗結果

2.注意事項

需要在配置清單檔案中加入訪問許可權
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Activity的跳轉也需要在清單檔案中設定
   <activity android:name=".WebViewActivity" >
            <intent-filter>
                <action android:name="com.action.webview"
/>
<category android:name="android.intent.category.DEFAULT" /> <category android:name="com.action.webviewcategory" /> </intent-filter> </activity>
//webview需要進行進一步的設定
public class WebViewActivity extends AppCompatActivity{
    private
WebView webView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); webView=(WebView)findViewById(R.id.webview); String url=getIntent().getExtras().getString("url"); webView.loadUrl(url); // 覆蓋WebView預設通過第三方或者是系統瀏覽器開啟網頁的行為,使得網頁可以在WebVIew中開啟
webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true的時候控制網頁在WebView中去開啟,如果為false呼叫系統瀏覽器或第三方瀏覽器去開啟 view.loadUrl(url); return true; } //WebViewClient幫助WebView去處理一些頁面控制和請求通知 }); //啟用支援JavaScript WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); //WebView載入頁面優先使用快取載入 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } }
package com.example.martinzou.android_exp_6;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

//主活動原始碼
public class MainActivity extends AppCompatActivity {
    private Button button;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);
        editText=(EditText)findViewById(R.id.editText) ;
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //對intent進行設定
                Intent intent=new Intent("com.action.webview");
                String url="http://"+editText.getText().toString();
                intent.addCategory("com.action.webviewcategory");
                intent.putExtra("url",url);
                startActivity(intent);
            }
        });
    }
}

3.Intent及WebView常用屬性

Intent屬性

Intent作為聯絡各Activity之間的紐帶,其作用並不僅僅只限於簡單的資料傳遞。通過其自帶的屬性,其實可以方便的完成很多較為複雜的操作。例如直接呼叫撥號功能、直接自動呼叫合適的程式開啟不同型別的檔案等等。諸如此類,都可以通過設定Intent屬性來完成。

Intent主要有以下四個重要屬性,它們分別為:

Action:Action屬性的值為一個字串,它代表了系統中已經定義了一系列常用的動作。通過setAction()方法或在清單檔案AndroidManifest.xml中設定。預設為:DEFAULT。

**Data:**Data通常是URI格式定義的操作資料。例如:tel:// 。通過setData()方法設定。

**Category:**Category屬性用於指定當前動作(Action)被執行的環境。通過addCategory()方法或在清單檔案AndroidManifest.xml中設定。預設為:CATEGORY_DEFAULT。

Extras:Extras屬性主要用於傳遞目標元件所需要的額外的資料。通過putExtras()方法設定。

四個屬性各自的常用值如下所示:

常用Action:

Action 說明
ACTION_MAIN: Android Application的入口,每個Android應用必須且只能包含一個此型別的Action宣告。
ACTION_VIEW: 系統根據不同的Data型別,通過已註冊的對應Application顯示資料。
ACTION_EDIT: 系統根據不同的Data型別,通過已註冊的對應Application編輯示資料。
ACTION_DIAL: 開啟系統預設的撥號程式,如果Data中設定了電話號碼,則自動在撥號程式中輸入此號碼。
ACTION_CALL 直接呼叫Data中所帶的號碼。
ACTION_SEND: 由使用者指定傳送方式進行資料傳送操作。

常用Category:

Category 說明
CATEGORY_DEFAULT: Android系統中預設的執行方式,按照普通Activity的執行方式執行。
CATEGORY_HOME: 設定該元件為Home Activity。
CATEGORY_PREFERENCE: 設定該元件為Preference。
CATEGORY_LAUNCHER: 設定該元件為在當前應用程式啟動器中優先順序最高的Activity,通常為入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE: 設定該元件可以使用瀏覽器啟動。
CATEGORY_GADGET: 設定該元件可以內嵌到另外的Activity中。

常用Extras:

Extras 說明
EXTRA_BCC: 存放郵件密送人地址的字串陣列。
EXTRA_CC: 存放郵件抄送人地址的字串陣列。
EXTRA_EMAIL: 存放郵件地址的字串陣列。
EXTRA_SUBJECT: 存放郵件主題字串。
EXTRA_TEXT: 存放郵件內容。

但是常用的一般都是自己定義的鍵值對

putExtra(String,byte)      putExtra(String,byte[])   
putExtra(String,short)     putExtra(String,short[])   
putExtra(String,int)       putExtra(String,int[])   
putExtra(String,long)      putExtra(String,long[])   
putExtra(String,float)     putExtra(String,float[])   
putExtra(String,double)    putExtra(String,double[])
putExtra(String,boolean)   putExtra(String,boolean[])  
putExtra(String,char)      putExtra(String,char[])    
putExtra(String,string)    putExtra(String,string[]) 
putExtra(String,Bundle)    putExtra(String,Serializable)      
putExtras(Bundle)

常用Data:

Data 說明
tel://: 號碼資料格式,後跟電話號碼。
mailto://: 郵件資料格式,後跟郵件收件人地址。
smsto://: 短息資料格式,後跟簡訊接收號碼。
content://: 內容資料格式,後跟需要讀取的內容。
file://: 檔案資料格式,後跟檔案路徑。
// 撥打電話114 (設定data為Uri格式的資料)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel://114"));
startActivity(intent);
// 傳送簡訊給10086 (設定data為Uri格式的資料)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto://10086"));
startActivity(intent);