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(); 方法    
     
     
  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/wq-code/p/6037412.html
Copyright © 2011-2022 走看看