zoukankan      html  css  js  c++  java
  • 【第一行代码笔记】(一)

    Android 系统框架

    1. Linux 内核层:为硬件提供底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动。

    2.系统运行库层:通过C/C++库来为android系统提供主要的特性支持,如SQLite库提供数据库的支持,OpenGL|ES库提供了3D绘图的支持,WebKit库提供了浏览器内核的支持,同时,这一层还有Android运行时库,Android运行时库还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程当中,并且拥有自己的Dalvik虚拟机实例。

    3.应用框架层:提供构建应用程序可能用到的各种API.

    4.应用层:所有安装在手机上的应用

    Android 四大组件

    活动Activity,服务Service,广播接收器Broadcast Receiver,内容提供者 Content Provider

    在活动中使用Menu

    首先在res下的menu文件夹下,新建xml文件,每个item标签中定义一个菜单项

    然后重写onCreateOptionMenu(Menu menu)方法,

    public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

    返回true表明允许创建的菜单显示出来,如果返回了false,创建的菜单则无法显示。

    接下来定义菜单的响应事件。

    public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case value:
                
                break;
    
            default:
                break;
            }
            return super.onOptionsItemSelected(item);
        }

    根据不同的id对不同的菜单项做出相应的响应。

    使用Intent在活动之间穿梭

    Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件指甲传递数据。Intent的用法大致可以分成两种,显式Intent和隐式Intent

    1.使用显式Intent

    Intent(Context packageContext,Class<?> cls)

    接受两个参数,第一个参数 Context 要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构造出Intent的意图

    通过startActivity(Intent intent)启动目标活动

    2.使用隐式Intent

    不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent并找出合适的活动去启动。

    什么叫合适的活动呢,简单来讲就是可以响应我们这个隐式Intent的活动,

    通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。只有<action>和<actegory>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent

    <category>标签包含了一些附加信息,更精确的指明当前活动。

    Intent intent = new Intent("android.intent.action.MAIN");这是Intent的另外一个构造函数,直接将action的字符串传了进去。

    每一个Intent中只能指定一个action,但却能指定多个category

    调用Intent中的addCategory()方法来添加一个category

    使用隐式Intent不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成为了可能。

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("https://www.baidu.com"));
    startActivity(intent);

    setData方法接收一个Uri对象,主要用于指定当前Intent正在操作的数据,而这些数据通常都是以字符串的形式传入到Uri.parse()方法中解析产生的。

    与此对应,我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能响应什么类型的数据。<data>标签中主要可以配置以下内容:
    1.android:scheme:用于指定数据的协议部分

    2.android:host:用于指定数据的主机名部分

    3.android:port:用于指定数据的端口部分

    4.android:path用于指定主机名和端口之后的部分

    5.android:mimeType:用于指定可以处理的数据类型,允许使用通配符的方式进行指定

    只有<data>标签中的指定内容和Intent中携带额Data完全一致时,当前活动才能够响应该Intent

    button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("tel:10086"));
                    startActivity(intent);
                }
            });

    点击按钮之后,会启动拨号应用

    向下一个活动传递数据

    Intent中提供了一系列putExtra()方法的重载,可以把我们想要的传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了

    String data = "Hello WebActivity";
        Intent intent = new Intent(MainActivity.this, WebActivity.class);
        intent.putExtra("extra_data", data);
        startActivity(intent);
    TextView tv = (TextView) findViewById(R.id.textView1);
            Intent intent = getIntent();
            String data = intent.getStringExtra("extra_data");
            tv.setText(data);

    返回数据给上一个活动

    startActivityForResult()方法接收两个参数,第一个参数是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。

    mainActiviyt

    button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    String data = "Hello WebActivity";
                    Intent intent = new Intent(MainActivity.this, WebActivity.class);
                    startActivityForResult(intent, 1);
                }
            });

    回调函数:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String returnedData = data.getStringExtra("data_extra");
                    Toast.makeText(getApplicationContext(), returnedData,
                            Toast.LENGTH_SHORT).show();
    
                }
    
                break;
    
            default:
                break;
            }
        }

    WebActivity.java

    button.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("data_extra", "Hello MainActivity");
                    setResult(RESULT_OK, intent);
                    finish();
                }
            });

    setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果。一般只使用 RESULT_OK或者RESULT_CANCELED这两个值,第二个参数则是把带有数据的Intent传递回去

    onActivityResult()方法带有三个参数,第一个参数是requestCode,即我们在启动活动时传入的请求码。第二个参数resultCode,即我们在返回数据时传入的处理结果,第三个参数,data,即写在这返回数据的Intent

    首先通过检查reaestCode的值来判断数据来源,确定数据来源之后,再通过resultCode的值来判断处理结果是否成功。

    如果想通过back键返回数据,可以通过重写onBackPressed()方法来解决问题        

  • 相关阅读:
    组合,封装与多态
    继承与派生
    面向对象基础练习
    面向对象基础
    类与对象
    数组与pandas模块
    Flask基础(15)-->模板代码的复用【宏(Macro)、继承(Block)、包含(include)】
    Flask基础(14)-->自定义过滤器
    Flask基础(13)-->Flask扩展Flask-Script
    Flask基础(12)-->请求上下文和应用上下文
  • 原文地址:https://www.cnblogs.com/six-moon/p/4642113.html
Copyright © 2011-2022 走看看