当前位置:   article > 正文

Android核心基础-8.Android四大组件之Activity-1.创建、启动

Android核心基础-8.Android四大组件之Activity-1.创建、启动

8.1.什么是Activity

  • 安卓四大组件之一, 用来显示界面, 一个Activity就是应用中一个界面

8.2. 创建

  • 定义类继承Activity
  • 在AndroidManifest.xml的<application>节点中声明<activity>
  • 清单文件说明
<?xml version="1.0" encoding="utf-8"?>//xml文件声明
<manifest xmlns:android="http://schemas.android.com/apk/res/android"//命名空间
    package="net.dxs.activity"//应用程序的包名,一个Android系统不可以同时安装两个及以上的同包名程序
    android:versionCode="1"//版本号
    android:versionName="1.0" >//版本名

    <uses-sdk
        android:minSdkVersion="8"//最低兼容版本
        android:targetSdkVersion="17" />//目标版本

    <uses-permission android:name="android.permission.CALL_PHONE" />//申请一个拨打电话的权限

    <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"//应用的图标
       android:label="@string/app_name"//应用的名称,系统设置卸载界面看到的应用名称
       android:theme="@style/AppTheme" >//应用要使用的主题
       <activity//一个界面
           android:name="net.dxs.activity.MainActivity"
           android:label="12.Main" >//当前界面的名称
           <intent-filter>//意图过滤器
               <action android:name="android.intent.action.MAIN" />//设置一个动作,启动程序

               <category android:name="android.intent.category.LAUNCHER" />//在桌面生成一个图标
           </intent-filter>
       </activity>

    //可以配置多个启动,在桌面生成多个启动图标
       <activity
           android:name="net.dxs.activity.OtherActivity"
           android:label="12.Other" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
    </application>
</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

8.3. 启动

创建Intent对象, Intent指定要启动哪个Activity, startActivity()

8.3.1 显式意图:

  • 指定类名, 通常用作应用程序内部跳转
  • 通过构造函数, 或者setClass(), setClassName()方法可以指定类名
  • startActivity()启动一个Activity
  • 如果启动其他应用程序中的Activity, 该Activity的export属性必须为true
    eg. 显示启动
public void explicit(View v) {
    Intent intent = new Intent();// 创建意图
    // Intent intent = new Intent(this, OtherActivity.class);// 创建意图
    // intent.setClass(this, OtherActivity.class);// 指定类
    // intent.setClassName(this, "net.dxs.activity.OtherActivity");
    intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");//启动其他应用时(系统短信), Activity的export属性为true才能用
    // intent.setClassName("com.android.camera", "com.android.camera.Camera");// 启动其他应用时(系统照相机), Activity的export属性为true才能用
    startActivity(intent);// 启动Activity
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8.3.2 隐式意图:

  • 不指定类名, 通常用在应用程序之间跳转
  • 通过Intent.setAction()和Intent.setData()来设置意图的动作和数据
  • Activity中的<intent-filter>如果能匹配上动作和数据就可以启动
    eg.隐式启动
/**
 * 隐式启动
 * 
 * @param v
 */
public void implicit(View v) {
    Intent intent = new Intent();

    //打电话
    intent.setAction(Intent.ACTION_CALL); // 设置动作
    intent.setData(Uri.parse("tel://15010990415")); // 设置数据

    //网址
    intent.setAction(Intent.ACTION_VIEW);//注意启动浏览器打开网址没有配置访问网络权限
    intent.setData(Uri.parse("http://www.baidu.com"));

    //图片
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file:///mnt/sdcard/a.jpg"), "image/*");//前两个//是协议,后一个/是跟目录

    //音频
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file:///mnt/sdcard/1.mp3"), "audio/*");

    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file:///mnt/sdcard/1.mp4"), "video/*");

    startActivity(intent); // 根据意图中的动作和数据来匹配一个Activity
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

附加:android用于打开各种文件的intent工具类

//android用于打开各种文件的intent【原创】

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.net.Uri.Builder;
import java.io.File;
import android.content.Intent;

//自定义android Intent类,
//可用于获取打开以下文件的intent
//PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO

示例:
//这个不行,可能是因为PDF.apk程序没有权限访问其它APK里的asset资源文件,又或者是路径写错?
//Intent it = getPdfFileIntent("file:///android_asset/helphelp.pdf");
//下面这些都OK
//Intent it = getHtmlFileIntent("/mnt/sdcard/tutorial.html");//SD卡主目录
//Intent it = getHtmlFileIntent("/sdcard/tutorial.html");//SD卡主目录,这样也可以
Intent it = getHtmlFileIntent("/system/etc/tutorial.html");//系统内部的etc目录
//Intent it = getPdfFileIntent("/system/etc/helphelp.pdf");
//Intent it = getWordFileIntent("/system/etc/help.doc");
//Intent it = getExcelFileIntent("/mnt/sdcard/Book1.xls")
//Intent it = getPptFileIntent("/mnt/sdcard/download/Android_PPT.ppt");//SD卡的download目录下
//Intent it = getVideoFileIntent("/mnt/sdcard/ice.avi");
//Intent it = getAudioFileIntent("/mnt/sdcard/ren.mp3");
//Intent it = getImageFileIntent("/mnt/sdcard/images/001041580.jpg");
//Intent it = getTextFileIntent("/mnt/sdcard/hello.txt",false);

startActivity( it );

public class MyIntent
{

//android获取一个用于打开HTML文件的intent
  public static Intent getHtmlFileIntent( String param )
  {
    Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build();
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.setDataAndType(uri, "text/html");
    return intent;
  }

//android获取一个用于打开图片文件的intent
  public static Intent getImageFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "image/*");
    return intent;
  }

  //android获取一个用于打开PDF文件的intent
  public static Intent getPdfFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "application/pdf");
    return intent;
  }

//android获取一个用于打开文本文件的intent
 public static Intent getTextFileIntent( String param, boolean paramBoolean)
{
 Intent intent = new Intent("android.intent.action.VIEW");
 intent.addCategory("android.intent.category.DEFAULT");
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 if (paramBoolean)
 {
Uri uri1 = Uri.parse(param );
intent.setDataAndType(uri1, "text/plain");
 }
 else
 {
Uri uri2 = Uri.fromFile(new File(param ));
intent.setDataAndType(uri2, "text/plain");
 }

 return intent;
}

//android获取一个用于打开音频文件的intent
  public static Intent getAudioFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("oneshot", 0);
    intent.putExtra("configchange", 0);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "audio/*");
    return intent;
  }

  //android获取一个用于打开视频文件的intent
  public static Intent getVideoFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("oneshot", 0);
    intent.putExtra("configchange", 0);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "video/*");
    return intent;
  }

  //android获取一个用于打开CHM文件的intent
  public static Intent getChmFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "application/x-chm");
    return intent;
  }

//android获取一个用于打开Word文件的intent
  public static Intent getWordFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "application/msword");
    return intent;
  }

//android获取一个用于打开Excel文件的intent
  public static Intent getExcelFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "application/vnd.ms-excel");
    return intent;
  }

//android获取一个用于打开PPT文件的intent
  public static Intent getPptFileIntent( String param )
  {
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri = Uri.fromFile(new File(param ));
    intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
    return intent;
  }
}

注意:
一定要在Manifest.xml中声明权限:
    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160

8.3.3 创建一个工具程序供第三方隐式意图调用的清单配置

<activity
   android:name="net.dxs.activity.OtherActivity"
    android:label="12.Other" >
    <intent-filter>//配置上网过滤器
        <action android:name="android.intent.action.VIEW" />//动作

        <data android:scheme="http" />//协议

        <category android:name="android.intent.category.DEFAULT" />//必须指定类型
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <data
            android:mimeType="image/*"
            android:scheme="file" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <data
            android:mimeType="audio/*"
            android:scheme="file" />
        <data
            android:mimeType="audio/*"
            android:scheme="http" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

获取第三方传递过来的数据

String action = getIntent().getAction();        
Uri data = getIntent().getData();               
String type = getIntent().getType();

Intent intent = getIntent();// 获取Intent
// 从Intent中获取数据
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", -1);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

示例源码->百度网盘

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/784558
推荐阅读
相关标签
  

闽ICP备14008679号