zoukankan      html  css  js  c++  java
  • (三)Android中Intent概念及应用

    一、显示Intent

      startActivity(new Intent(MainActivity.this,BAty.class));

      显示Intent直接指定要启动的Intent类

      注意自己通过创建一个java类,然后让其继承Activity时,只需在该类中添加onCreate重载函数,然后在其中设置setContentView(R.layout."自定义的xml布局文件") 

    package com.example.shiyanshi.learnintent;

    import android.app.Activity;
    import android.os.Bundle;

    /**
    * Created by shiyanshi on 2015/12/28.
    */
    public class MyAty extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    }
    }
    除此之外还要在AndroidManifest.xml中的application中添加<activity android:name=".MyAty"/>
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shiyanshi.learnintent" >

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity android:name=".MyAty"/>
    </application>

    </manifest>

    二、隐式Intent

      通过在AndroidManifest.xml文件中指定<intent-filter>的action和category,然后在startActivity设置new Intent(“com.example.shiyanshi.learnintent.MyAty”).注意此处的字符串的名字要与action属性中name中的字符串一样。

    通过这种隐式的Intent,可以在另外的一个app中调用这个app定义的activity,注意若不想让当前的activity被其他应用程序调用只需设置<activity android:name=".MyAty" android:exported="false">acitivity的exported属性为false(默认为真)。

    可以通过try-catch语句捕获异常信息,并使用Toast.makeText(……).show();进行显示出来
    try {
    startActivity(new Intent("com.example.shiyanshi.learnintent.MyAty"));
    }catch (Exception e){
    Toast.makeText(MainActivity.this,"无法启动指定的Activity",Toast.LENGTH_SHORT).show();
    }
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shiyanshi.learnintent" >

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity android:name=".MyAty">
    <intent-filter>
    <action android:name="com.example.shiyanshi.learnintent.MyAty"/>
    <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    </activity>
    </application>

    </manifest>
    三、Intent过滤器相关选项
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shiyanshi.learnintent" >

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity
    android:name=".MyAty"
    android:label="MyAty">
    <intent-filter>
    <action android:name="com.example.shiyanshi.learnintent.MyAty" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    </activity>
    <activity
    android:name=".MyAty1"
    android:label="@string/title_activity_my_aty1" >
    <intent-filter>
    <action android:name="com.example.shiyanshi.learnintent.MyAty"/>
    <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    </activity>
    </application>

    </manifest>
    当新建的两个不同的Activity的intent-filter的action属性中的name为同一个值时,仍然可以通过上述startActivity(new Intent("com.example.shiyanshi.learnintent.MyAty"));方式启动,
    但是在应用程序启动后会有一个选择具体要启动哪个Activity的对话框,可选择一次或总是,选择总是后会在被调用的应用程序中设定默认信息,下次启动时便不会再提问,可以拖动app到的应用信息上,清除其中的默认设置。
    此外还可以指定data属性,如下所示。这样在启动Activity时可以使用startActivity(new Intent("com.example.shiyanshi.learnintent.MyAty", Uri.parse("app://hello")));其中app://是指协议,后面紧跟的参数可以任意设置。
    <activity
        android:name=".MyAty1"
    android:label="@string/title_activity_my_aty1" >
    <intent-filter>
    <action android:name="com.example.shiyanshi.learnintent.MyAty"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:scheme="app"/>
    </intent-filter>
    </activity>
    四、通过浏览器启动Activity
    若想Activity被浏览器启动需设置红色标注的部分,在浏览器开发中href设置为“app://hello"(其中hello为任意设置的参数)。
    <activity
        android:name=".LocalActivity"
    android:label="@string/title_activity_local" >
    <intent-filter>
    <category android:name="ANDROID.INTENT.CATEGORY.BROWSABLE"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <action android:name="android.intent.action.VIEW"/>
    <data android:scheme="app"/>
    </intent-filter>
    </activity>
    若想获取浏览器的返回数据可以设置Uri uri=getIntent().getData();来返回一个Uri对象。
     






    henry
  • 相关阅读:
    Vue动态路由配置-router.addRoute
    安装nginx(Centos和docker)
    前后端分离跨域问题解决方案
    centos7 部署 gitlab
    date命令使用方法
    电脑明明安装了模块,但是pycharm还是找不到怎么办
    shell脚本中字符串截取问题
    linux中每登录一个终端,就会自动执行脚本
    腾讯文档中怎么添加二级缩进符号
    查看CPU某一核的情况
  • 原文地址:https://www.cnblogs.com/ql698214/p/5082026.html
Copyright © 2011-2022 走看看