新思想

Activity 跳转

JumpActivity

JumpActivity2

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());
        }
    }
}

源程序下载

参考:

posted on 2016-06-05 22:23  新思想  阅读(265)  评论(0)    收藏  举报

导航