Activity 跳转


AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xiesir.example25jumpactivity"> <uses-permission android:name="android.permission.CALL_PHONE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity"> <intent-filter > <action android:name="a.b.c"/> <!--<action android:name="a.b.c.d"/>--> <!--<data android:scheme="xiesir"/>--> <data android:scheme="xiesir" android:mimeType="text/name"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application> </manifest>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:columnCount="4" android:rowCount="3" tools:context="com.xiesir.example25jumpactivity.MainActivity"> <Button android:onClick="clickDIAL" android:text="打电话" /> <Button android:onClick="clickSENDTO" android:text="发短信?" /> <Button android:onClick="clickEXTRA_STREAM" android:text="发彩信?" /> <Button android:text="发??" /> <Button android:onClick="clickVIEW" android:text="浏览器" /> <Button android:onClick="clickSENDTOMail" android:text="发邮件" /> <Button android:onClick="clickVIEWMap" android:text="地图" /> <Button android:onClick="clickVIEWMedia" android:text="多媒体?" /> <Button android:onClick="click2" android:text="显式拨号" /> <Button android:onClick="click3" android:text="隐式拨号" /> <Button android:onClick="click4" android:text="隐式跳转" /> <Button android:onClick="click5" android:text="显式跳转" /> </GridLayout>
activity_second.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="第二个界面" android:textSize="28sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvSecond" android:text="你好" android:textSize="28sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity.java:
package com.xiesir.example25jumpactivity; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import java.net.URI; import java.net.URL; public class MainActivity extends AppCompatActivity { final private static int MY_PERMISSIONS_REQUEST_CALL_PHONE = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 隐式跳转至打电话Activity public void clickDIAL(View v) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Build.VERSION_CODES.M == 23,即 Android 6.0 ,也即 API 23 // 判断当前Activity是否已经获得了该权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE); else dothing(); } else dothing(); } private void dothing() { // Uri uri = Uri.parse("tel:10086"); // // 创建意图,这个是隐式意图 // Intent intent = new Intent(); // // 设置动作 // intent.setAction(Intent.ACTION_CALL); // intent.setData(uri); // // 启动Activity // startActivity(intent); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:10086")); startActivity(intent); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) dothing(); else // Permission Denied Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } public void clickVIEW(View v) { // // 隐式启动浏览器 // Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.bing.com/")); // startActivity(intent); // 显式启动浏览器 Intent intent = new Intent(); intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); startActivity(intent); } public void clickSENDTOMail(View v) { // 给 zhangsan@qq.com 发邮件发送内容为“Hello”的邮件 Uri uri = Uri.parse("mailto:zhangsan@qq.com"); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, uri); intent.putExtra(Intent.EXTRA_SUBJECT, "测试邮件"); intent.putExtra(Intent.EXTRA_TEXT, "你好"); // startActivity(intent); startActivity(intent.createChooser(intent, "请选择邮件发送软件")); } public void clickVIEWMap(View v) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:39.9,116.3")); startActivity(intent); } // Activity跳转 // 1. 显式跳转 // * 同一应用中,指定目标Activity的字节码和当前的上下文 // * 不同应用中,指定目标Activity所在的应用的包名和目标Activity的包名加类名 // 2. 隐式跳转 // * 系统会在所有清单文件中寻找与程序员创建的intent匹配的intent-filter,找到则启动,找不到则抛异常 // * 匹配就是intent-filter中定义了什么属性,程序员创建的intent中也必须设置什么属性 // * 在清单文件的activity标签下,配置intent-filter子节点,其中再配置action和category // 3. 应用场景 // * 启动同一应用中的Activity,用显式 // * 启动不同应用中的Activity,用隐式 // * 显式启动效率高于隐式 // 显式启动拨号器 public void click2(View v) { Intent intent = new Intent(); // arg0:目标Activity所在的应用的包名 // arg1:目标Activity的类名,注意要带上包名 intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity"); startActivity(intent); } // 隐式启动拨号器 public void click3(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_DIAL); startActivity(intent); } // 隐式启动SecondActivity public void click4(View v) { Intent intent = new Intent(); intent.setAction("a.b.c"); // 匹配mimetype // intent.setType("text/name"); // 匹配scheme // intent.setData(Uri.parse("xiesir: 萌萌哒")); intent.setDataAndType(Uri.parse("xiesir: 萌萌哒"), "text/name"); // 如果没有设置Category的匹配,那么自动匹配CATEGORY_DEFAULT // intent.addCategory(Intent.CATEGORY_DEFAULT); startActivity(intent); } // 显式启动SecondActivity public void click5(View v) { // 这个是显式意图 Intent intent = new Intent(); // 设置上下文和目标Activity的字节码 intent.setClass(this, SecondActivity.class); startActivity(intent); } }
SecondActivity.java:
package com.xiesir.example25jumpactivity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; /** * Created by xiegly on 2016/6/4. */ public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 获取启动该Activity的意图对象 Intent intent = getIntent(); if (intent.getData() != null) { // 获取封装在intent中的data Uri uri = intent.getData(); TextView tvSecond = (TextView) findViewById(R.id.tvSecond); tvSecond.setText(uri.toString()); } } }
参考:
浙公网安备 33010602011771号