zoukankan      html  css  js  c++  java
  • 毕设记录(三)

    第二讲

    添加意图

    在添加意图之前的准备工作:目前只有一个窗口,因此要新建一个(?),可以叫SecondActivity,具体方法如下

    那么这就相当于新的一个界面了,在新的界面中,我们可以看到与之前的初始界面一样的onCreate,里面同样有
    setContentView(R.layout.activity_second);//加载布局
    我们可以看到Mainifests文件中,AS已经帮我们创建好第二个活动了
    <activity android:name=".SecondActivity"></activity>
    分析第一个活动的信息:

    <!-- 间接寻址 -->
            <activity android:name=".MainActivity">
                <!-- 意图过滤器 -->
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <!--主Activity-->
                    <category android:name="android.intent.category.LAUNCHER" />
                    <!--发射器,应用程序中首先调被启动的-->
                </intent-filter>
            </activity>
    

    我们也可以仿照设计第二个活动

    显示Intent

    我们想要的功能是点击按钮打开第二个页面

    在点击按钮那里添加

    //显示Intent,指名道姓的说想要调用那个意图
    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
    //意图自己不会启动,手动启动
    startActivity(intent);
    

    隐式Intent

    在Mainifest中添加:

    <activity android:name=".SecondActivity">
          <intent-filter>
              <action android:name="android.intent.action.START_ACTION"/>
              <category android:name="android.intent.category.DEFAULT"/>
          </intent-filter>
    </activity>
    

    其中,action_name可以自己起(?)
    在MainActivity处添加:

    //隐式Intent
    Intent intent=new Intent("android.intent.action.START_ACTION");
    //第一个参数为活动名,最好复制,第二个为category,因为是default所以不写
    startActivity(intent);
    

    通过隐式Intent调用系统应用

    以拨号为例

    //通过隐式Intent调用系统应用
    Intent intent =new Intent();
    intent.setAction(Intent.ACTION_CALL);//调用拨号系统应用
    intent.setData(Uri.parse("tel:15665869115"));//给他数据
    startActivity(intent);
    

    运行发现报错

    查看错误信息

    发现是没有申请用户权限,在Mainifest中,application外面添加:

    <!-- 向用户申请打电话的权限 -->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    

    再次运行,发现还是不报错,原因是我们没有在手机中打开权限,app只是申请了,但是我们没有给他
    在设置的应用权限中找到应用,在所有应用中找到,我们的app给他打开打电话的权限即可
    再次运行成功

    intent.setAction(Intent.ACTION_DIAL);//调用拨号系统应用
    

    DIAL和CALL的区别如图:

    一些诸如此类的调用

    • 打开设置窗口
    intent.setAction("android.settings.SETTINGS");//打开设置
    
    • 打开联系人列表
    intent.setAction("com.android.contacts.action.LIST_CONTACTS");//打开联系人列表
    

    具体其他的可见文档。

    用Intent传递数据

    用到的是intent.putExtra()
    可以看到有很多的重载方法

    Main向SecondActivity传递

    在Main中添加显示Intent如下:

    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
    intent.putExtra("Data","Hello SecondActivity");//名为Data,值为"Hello SecondActivity"
    startActivity(intent);
    

    这只是完成了传出,同时SecondActivity还要接受

    //新建intent但是不用new,是getIntent(),接收来自intent的数据
    Intent intent = getIntent();
    //接收名称为Data的数据
    String data=intent.getStringExtra("Data");
    //用日志打印一下检验是否接收成功,标签,传递的(显示的)数据
    Log.d("SecondActivity",data);
    

    日志信息如下

    从SecondActivity向Main传递

    Main中添加:

    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
    startActivityForResult(intent,1);//1是用来区别请求和响应的
    

    同时接收

    @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            //super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
                case 1:
                    if (resultCode == RESULT_OK) {
                        String resultData = data.getStringExtra("data_return");
                        Log.d("MainActivity", resultData);
                    }
                    break;
            }
        }
    

    而SecondActivity作为发送方,需要在按钮添加监听以达到点击跳转并发送数据的目的:

     /*
    初始化窗口
    */
        public void initView(){
            button2 = findViewById(R.id.button2);
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("data_return","Hello MainActivity");
                    setResult(RESULT_OK,intent);//RESULT_OK=-1
                    finish();//关闭窗口
                }
            });
        }
    

    别忘了将initView方法添加到onCreat方法中。
    可以看到运行:

  • 相关阅读:
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 24 两两交换链表中的节点
    Java实现 LeetCode 24 两两交换链表中的节点
    Java实现 LeetCode 24 两两交换链表中的节点
  • 原文地址:https://www.cnblogs.com/LOW-ctfer/p/14268625.html
Copyright © 2011-2022 走看看