Intent隱式跳轉活動開啟網頁
阿新 • • 發佈:2019-01-22
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);