• [转]Activity详解 Intent显式跳转和隐式跳转


    Activity 生命周期
     
     
     
     
     
     
    显式 Intent 调用
     
     
     
     
     1     //创建一个显式的 Intent 对象(方法一:在构造函数中指定)
     2      Intent intent = new Intent(Intent_Demo1.this, Intent_Demo1_Result1.class);
     3      
     4      Bundle bundle = new Bundle();
     5      bundle.putString("id", strID);
     6      intent.putExtras(bundle);
     7      
     8      intent.putExtra("name", "bbb");
     9      intent.putExtra("userInfo", new UserInfo(1, "name"));
    10      startActivity(intent);
    11      
    12      //创建一个显式的 Intent 对象(方法二:用 setClass 方法)
    13      Intent intent = new Intent();
    14      Bundle bundle = new Bundle();
    15      bundle.putString("id", strID);
    16      intent.setClass(Intent_Demo1.this, Intent_Demo1_Result1.class);
    17      intent.putExtras(bundle);
    18      startActivity(intent);
    19      
    20      //创建一个显式的 Intent 对象(方法三:用 setClass 方法)
    21      Intent intent = new Intent();
    22      Bundle bundle = new Bundle();
    23      bundle.putString("id", strID);
    24      intent.setClassName(Intent_Demo1.this, "com.great.activity_intent.Intent_Demo1_Result1");
    25      intent.putExtras(bundle);
    26      startActivity(intent);
    27      
    28      //创建一个显式的 Intent 对象(方法四:用 setComponent 方法)
    29      Intent intent = new Intent();
    30      Bundle bundle = new Bundle();
    31      bundle.putString("id", strID);
    32      //setComponent方法的参数:ComponentName
    33      intent.setComponent(new ComponentName(Intent_Demo1.this, Intent_Demo1_Result1.class));
    34      intent.putExtras(bundle);
    35      startActivity(intent);
     
     
     
    Intent隐式跳转 Action
     
     
     1     //创建一个隐式的 Intent 对象:Action 动作
     2     /**
     3      * 这里指定的是 AndroidManifest.xml 文件中配置的
     4      * <intent-filter>标签中的<action android:name="com.great.activity_intent.Intent_Demo1_Result3" />
     5      * 所在的 Activity,注意这里都要设置 <category android:name="android.intent.category.DEFAULT" />
     6      */
     7     Intent intent = new Intent();
     8     //设置 Intent 的动作
     9     intent.setAction("com.great.activity_intent.Intent_Demo1_Result3");
    10     Bundle bundle = new Bundle();
    11     bundle.putString("id", strID);
    12     intent.putExtras(bundle);
    13     startActivity(intent);
     
    AndroidManifest.xml
     
     
    1    <activity android:name="Intent_Demo1_Result3"
    2                   android:label="Intent_Demo1_Result3">
    3             <intent-filter>
    4                 <action android:name="com.great.activity_intent.Intent_Demo1_Result3" />
    5                 <category android:name="android.intent.category.DEFAULT" />
    6             </intent-filter>
    7         </activity>
     
     
     
    Category 类别
     
     
     1 //创建一个隐式的 Intent 对象:Category 类别
     2 Intent intent = new Intent();
     3 intent.setAction("com.great.activity_intent.Intent_Demo1_Result33");
     4 /**
     5  * 不指定 Category 或 只指定 AndroidManifest.xml 文件中 <intent-filter> 标签中配置的任意一个 Category
     6  * <category android:name="android.intent.category.DEFAULT" /> 除外,就可以访问该 Activity,
     7  */
     8 intent.addCategory(Intent.CATEGORY_INFO);
     9 intent.addCategory(Intent.CATEGORY_DEFAULT);
    10 Bundle bundle = new Bundle();
    11 bundle.putString("id", strID);
    12 intent.putExtras(bundle);
    13 startActivity(intent);
     
    AndroidManifest.xml
     
     
      <activity android:name="Intent_Demo1_Result2"
                      android:label="Intent_Demo1_Result2">
                <intent-filter>
                    
                    <category android:name="android.intent.category.INFO" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <category android:name="android.intent.category.DEFAULT" />
                    
                </intent-filter>
            </activity>
     
    Date 数据 跳转
     
     
     1 //创建一个隐式的 Intent 对象,方法四:Date 数据
     2 Intent intent = new Intent();
     3 Uri uri = Uri.parse("http://www.great.org:8080/folder/subfolder/etc/abc.pdf");
     4 
     5 //注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用                
     6 //要么单独以 setData 方法设置 URI
     7 //intent.setData(uri);
     8 //要么单独以 setDataAndType 方法设置 URI 及 mime type
     9 intent.setDataAndType(uri, "text/plain");
    10 //要么单独以 setDataAndType 方法设置 Type
    11 //intent.setType("text/plain");
    12 
    13 /**
    14  * 不指定 Category 或 只指定 AndroidManifest.xml 文件中 <intent-filter> 标签中配置的任意一个 Category
    15  * <category android:name="android.intent.category.DEFAULT" /> 除外,就可以访问该 Activity
    16  */
    17 Bundle bundle = new Bundle();
    18 bundle.putString("id", strID);
    19 intent.putExtras(bundle);
    20 startActivity(intent);
     
    AndroidManifest.xml
     
     
     1         <activity android:name="Intent_Demo1_Result2"
     2                   android:label="Intent_Demo1_Result2">
     3             <intent-filter>
     4                 <category android:name="android.intent.category.DEFAULT" />
     5                 <data 
     6                     android:scheme="http"
     7                     android:host="www.great.org"
     8                     android:port="8080"
     9                     android:pathPattern=".*pdf"
    10                     android:mimeType="text/plain"/>
    11             </intent-filter>
    12         </activity>
    13         
     
     
     
     调用系统的的组件
     
     
     
     
        //web浏览器
        Uri uri= Uri.parse("http://www.baidu.com:8080/image/a.jpg");
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
        
        //地图(要在 Android 手机上才能测试)
        Uri uri = Uri.parse("geo:38.899533,-77.036476");
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
        
        //路径规划
        Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
        Intent it = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(it);
        
        //拨打电话-调用拨号程序
        Uri uri = Uri.parse("tel:15980665805");
        Intent intent = new Intent(Intent.ACTION_DIAL, uri);
        startActivity(intent);
        
        //拨打电话-直接拨打电话
        //要使用这个必须在配置文件中加入<uses-permission android:name="android.permission.CALL_PHONE"/>
        Uri uri = Uri.parse("tel:15980665805");
        Intent intent = new Intent(Intent.ACTION_CALL, uri);
        startActivity(intent);
     
        //调用发送短信程序(方法一)
        Uri uri = Uri.parse("smsto:15980665805");
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        intent.putExtra("sms_body", "The SMS text");
        startActivity(intent);
        
        //调用发送短信程序(方法二)
        Intent intent = new Intent(Intent.ACTION_VIEW);     
        intent.putExtra("sms_body", "The SMS text");     
        intent.setType("vnd.android-dir/mms-sms");     
        startActivity(intent);
        
        //发送彩信
        Uri uri = Uri.parse("content://media/external/images/media/23");
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.putExtra("sms_body", "some text");
        intent.putExtra(Intent.EXTRA_STREAM, uri);
        intent.setType("image/png");
        startActivity(intent);
        
        //发送Email(方法一)(要在 Android 手机上才能测试)
        Uri uri = Uri.parse("mailto:zhangsan@gmail.com");
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        startActivity(intent);
        
        //发送Email(方法二)(要在 Android 手机上才能测试)
        Intent intent = new Intent(Intent.ACTION_SENDTO);  
        intent.setData(Uri.parse("mailto:zhangsan@gmail.com"));  
        intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题");  
        intent.putExtra(Intent.EXTRA_TEXT, "这是内容");  
        startActivity(intent); 
        
        //发送Email(方法三)(要在 Android 手机上才能测试)
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
        intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题");  
        intent.putExtra(Intent.EXTRA_TEXT, "这是内容");
        intent.setType("text/plain");
        //选择一个邮件客户端
        startActivity(Intent.createChooser(intent, "Choose Email Client"));  
        
        //发送Email(方法四)(要在 Android 手机上才能测试)
        Intent intent = new Intent(Intent.ACTION_SEND);
        //收件人
        String[] tos = {"to1@abc.com", "to2@abc.com"};
        //抄送人
        String[] ccs = {"cc1@abc.com", "cc2@abc.com"};
        //密送人
        String[] bcc = {"bcc1@abc.com", "bcc2@abc.com"};
        intent.putExtra(Intent.EXTRA_EMAIL, tos);    
        intent.putExtra(Intent.EXTRA_CC, ccs);
        intent.putExtra(Intent.EXTRA_BCC, bcc);
        intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题"); 
        intent.putExtra(Intent.EXTRA_TEXT, "这是内容");    
        intent.setType("message/rfc822");    
        startActivity(Intent.createChooser(intent, "Choose Email Client"));
        
        //发送Email且发送附件(要在 Android 手机上才能测试)
        Intent intent = new Intent(Intent.ACTION_SEND);    
        intent.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");    
        intent.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mp3/醉红颜.mp3");    
        intent.setType("audio/mp3");    
        startActivity(Intent.createChooser(intent, "Choose Email Client"));
        
        //播放媒体文件(android 对中文名的文件支持不好)
        Intent intent = new Intent(Intent.ACTION_VIEW);
        //Uri uri = Uri.parse("file:///sdcard/zhy.mp3");
        Uri uri = Uri.parse("file:///sdcard/a.mp3"); 
        intent.setDataAndType(uri, "audio/mp3"); 
        startActivity(intent);
        
        Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");     
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);     
        startActivity(intent); 
        
        //音乐选择器
        //它使用了Intent.ACTION_GET_CONTENT 和 MIME 类型来查找支持 audio/* 的所有 Data Picker,允许用户选择其中之一
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
        intent.setType("audio/*");
        //Intent.createChooser:应用选择器,这个方法创建一个 ACTION_CHOOSER Intent
        startActivity(Intent.createChooser(intent, "选择音乐"));
        
        Intent intent1 = new Intent(Intent.ACTION_GET_CONTENT); 
        intent1.setType("audio/*");
        
        Intent intent2 = new Intent(Intent.ACTION_CHOOSER);
        intent2.putExtra(Intent.EXTRA_INTENT, intent1);
        intent2.putExtra(Intent.EXTRA_TITLE, "aaaa");
        startActivity(intent2);
        
        
    //                //设置壁纸
    //                Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);  
    //                startActivity(Intent.createChooser(intent, "设置壁纸"));  
        
        //卸载APK
        //fromParts方法
        //参数1:URI 的 scheme
        //参数2:包路径
        //参数3:
        Uri uri = Uri.fromParts("package", "com.great.activity_intent", null);    
        Intent intent = new Intent(Intent.ACTION_DELETE, uri);     
        startActivity(intent);
        
        //安装APK(???)
        Uri uri = Uri.fromParts("package", "com.great.activity_intent", null);  
        Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, uri);
        startActivity(intent);
        
        //调用搜索
        Intent intent = new Intent();  
        intent.setAction(Intent.ACTION_WEB_SEARCH);  
        intent.putExtra(SearchManager.QUERY, "android");  
        startActivity(intent);
  • 相关阅读:
    CVE-2014-6271 Shellshock 破壳漏洞 复现
    0ctf-ezdoor-复现分析
    phpinfo中敏感信息记录
    未授权访问总结学习
    关于PHP内部类的一些总结学习
    PHP反序列化总结
    SSRF和XSS-filter_var(), preg_match() 和 parse_url()绕过学习
    Java14:你需要知道的新特性
    结构型设计模式
    项目总结
  • 原文地址:https://www.cnblogs.com/ZhuRenWang/p/4890234.html
Copyright © 2020-2023  润新知