zoukankan      html  css  js  c++  java
  • Android 之 Intent(意图)

    Intent是 Android中重要的桥梁之一,它分为显式意图和隐式意图。接下来分别针对这两种意图进行讲解。

    • 显式意图:通过指定一组数据或动作,激活应用内部的 activity;(相比隐式意图,此做法更安全)
    Intent intent = new Intent();  
    intent.setClass(MainActivity.this,Main2Activity.class); //第一个参数指的就是要跳转的那个Activity;第二个指的是跳到的那个Activity  
    startActivity(intent); //如果没有回调的时候直接这样就OK  
    或者
    Intent intent = new Intent();  
    intent.setClassName("com.sd.study.test_01","com.sd.study.test_02"); //第一个参数指的就是要跳转的那个Activity的包名;第二个指的是跳到的那个Activity的包名 
    startActivity(intent);
    或者
    Intent intent = new Intent(this,Main2Activity.class);//第一个参数指的就是要跳转的那个Activity;第二个指的是跳到的那个Activity    
    startActivity(intent);
    

      

    • 隐式意图:通过指定具体的包名和类名,打开另一个程序的 Activity。
    //实现跳转的功能
    Intent intent = new Intent();
    //设置跳转的动作
    intent.setAction(" 清单文件中目标activity的name ");
    //设置 category
    intent.addCategory(" 清单文件中目标activity的category ");
    //开启 Activity (如果需要加权限记得加上)
    startActivity(intent);
      
      
    //实现拨打电话的功能
    Intent intent = new Intent();
    //设置拨打的动作
    intent.setAction(" 清单文件中目标activity的name");
    //设置拨打的数据
    intent.setData(Uri.parse("tel:"+119));
    //开启 Activity (如果需要加权限记得加上)
    startActivity(intent);
    

      

    //清单文件
    <application
        android:name=".MyApp"
        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=".Main2Activity"> // " 清单文件中目标activity的name "
                                                 // " 清单文件中目标activity的category "
        </activity>
    </application>

    • Android数据传递与回传
    //第一个Activity
    public class MainActivity extends Activity {  
    private Button btn ;  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            btn = (Button)findViewById(R.id.button);
            //设置单击事件
            btn.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View v) {  
                    Intent intent = new Intent();    
                    intent.setClass(mainActivity.this,main2Activity.class); //第一个参数指的就是要跳转的那个Activity;第二个指的是跳到的那个Activity 
                    intent.putExtra("str1", "hello world");  
                    intent.putExtra("str2", "你好,世界");  
                    //如果没有回调也不用重写这个方法
                    startActivityForResult(intent, 1);  
                }  
            });  
        }
    }
    
    
    //第二个Activity
    public class Main2Activity extends Activity {  
        protected void onCreate(Bundle savedInstanceState) {  
             super.onCreate(savedInstanceState);  
             setContentView(R.layout.activity_main);  
             btn = (Button)findViewById(R.id.button);  
             Intent intent = this.getIntent();  
             Bundle bundle = intent.getExtras();
             //根据"键值对"取值
             String str1 = bundle.getString("str1");  
             String str2 = bundle.getString("str2"); 
             //按钮的点击事件
             btn.setOnClickListener(new OnClickListener() {  
                 @Override  
                 public void onClick(View v) {  
                     Intent intent = new Intent();  
                     intent.putExtra("str3", "Back Data");  
                     setResult(0, intent); //设置返回值,参数1用于向上一个活动返回处理结果,参数2把带有数据的intent传递回去。 
                     finish(); //调用这个方法,此Activity关闭,并把它从栈中移除。然后进入到前一个Activity  
                }  
            });  
        } 
    } 

    /* 由于我们使用的是startActivityForResult()方法,因此我们需要在第一个Activity中重写onActivityResult()方法 */
    
    //第一个Activity
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { // requestCode,即我们在启动活动时传入的请求码;resultCode,即我们在返回数据时传入的处理结果;data,即携带着返回数据的Intent。
        switch (requestCode){ 
            case 1:
                if(requestCode == 0){
                    data.getStringExtra("str3");
                }
                break;
            default:
        }
    }
      • 数据传递
        • putExtra(); //可以传递8种基本数据类型;
        • Bundle(); //可以传递8种基本数据类型;
      • 回传数据  
        • a. 调用者Activity开启新的界面选用  startActivityForResult();
    startActivityForResult(intent, 1); //如果没有回调则不用重写这个方法
        • b. 在新开启的Activity中设置返回值    
    Intent intent = new Intent();
    intent.putExtras();
    setResult();//设置返回值
        • c. 操作关闭  finish();    
        • d. 在调用者Activity 中调用onActivityResult(); 方法    
     
     
  • 相关阅读:
    使用zoom.js设置博客园图片放大缩小
    js中变量对象和活动对象的区别 闭包时的区别
    总结Unity 初学者容易犯的编译与运行时错误
    三天之后的「数」下英雄会是个什么会?
    奇点云数据中台技术汇(十)| 数据服务,让业务开发更敏捷
    湖畔论剑 | 一封“数”下英雄会的神秘邀请函
    12月5日,「数据中台建设之道」线上开聊
    StartDT AI Lab | 视觉智能引擎之算法模型加速
    贵州茅台集团一行考察奇点云,探讨酒业数智化转型
    何夕:如何让实体商家拥有淘宝一样的数据化运营能力
  • 原文地址:https://www.cnblogs.com/wq-code/p/6037412.html
Copyright © 2011-2022 走看看