安卓day30页面跳转和数据传递

一、排坑

显式意图跳转闪退

应用间不要用显式意图

二、Activity跳转

Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity

通过设置Activity的包名和类名实现跳转,称为显式意图

通过指定动作实现跳转,称为隐式意图

显式意图

跳转至同一项目下的另一个Activity,直接指定该Activity的字节码即可

跳转至其他应用中的Activity,需要指定该应用的包名和该Activity的类名

隐式意图

要让一个Activity可以被隐式启动,需要在清单文件的activity节点中设置intent-filter子节点

<intent-filter >
<action android:name="com.itheima.second"/>
<data android:scheme="asd" android:mimeType="aa/bb"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

action 指定动作(可以自定义,可以使用系统自带的)
data 指定数据(操作什么内容)
category 类别 (默认类别,机顶盒,车载电脑)
隐式意图启动Activity,需要为intent设置以上三个属性,且值必须与该Activity在清单文件中对三个属性的定义匹配
intent-filter节点及其子节点都可以同时定义多个,隐式启动时只需与任意一个匹配即可

显式意图和隐式意图的应用场景

显式意图用于启动同一应用中的Activity
隐式意图用于启动不同应用中的Activity
如果系统中存在多个Activity的intent-filter同时与你的intent匹配,那么系统会显示一个对话框,列出所有匹配的Activity,由用户选择启动哪一个

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
            //申请权限
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.CALL_PHONE},1);
        }else {
            //把动作告诉系统
            //send();
        }
    }
    /**
     * 跳转至打电话activity
     * 跳转至其他应用的activity
     * 隐式跳转:通过指定action和data
     * @param v
     */
    public void click1(View v){
        Intent intent = new Intent();
        //隐式意图
        intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:110"));
        //跳转
        startActivity(intent);
    }
    
    /**
     * 跳转至secondActivity
     * 在本应用中跳转
     * 显示跳转:直接指定目标Activity的包名和类名
     * @param v
     */
    public void click2(View v){
        Intent intent = new Intent();
        //cls:直接指定目标Activity的类名
        //显示意图
        intent.setClass(this, SecondActivity.class);
        startActivity(intent);
    }
    
    /**
     * 显示跳转至拨号器
     */
    //bug!!!
    public void click3(View v){
        Intent intent = new Intent();
        //指定目标Activity的包名和类名
        intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
        startActivity(intent);
    }
    /**
     * 隐式跳转至拨号器
     */
    public void click4(View v){
        Intent intent = new Intent();
        //隐式设置拨号器的动作
        intent.setAction(Intent.ACTION_DIAL);
        startActivity(intent);
    }
    
    /**
     * 隐式跳转至secondActivity
     * @param v
     */
    public void click5(View v){
        Intent intent = new Intent();
        intent.setAction("com.itheima.sa2");
//        intent.setData(Uri.parse("heima2:qwe"));
//        intent.setType("text/username");
//        intent.setData(Uri.parse("heima2:qwe123"));
        
        intent.setDataAndType(Uri.parse("heima2:qwe123"), "text/username");
        //系统会自动添加默认的category
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivity(intent);
    }
    
    /**
     * 显式跳转至浏览器
     */
    //bug!!!
    public void click6(View v){
        Intent intent = new Intent();
        intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
        startActivity(intent);
    }
    /**
     * 隐式跳转至浏览器
     * @param v
     */
    public void click7(View v){
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.index42.createactivity">
<uses-permission android:name="android.permission.CALL_PHONE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:icon="@drawable/photo2"
            android:label="主界面">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"
            android:icon="@drawable/photo3"
            android:label="第二个界面">
            <intent-filter ><action android:name="com.itheima.sa"/>
                <action android:name="com.itheima.sa3"/>
                <data android:scheme="heima"/>
                <data android:scheme="heima3"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

            <intent-filter >
                <action android:name="com.itheima.sa2"/>
                <data android:scheme="heima2" android:mimeType="text/username"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

猜你喜欢

转载自www.cnblogs.com/index42/p/10462840.html