安卓_安卓开发 - CSDN
安卓 订阅
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 [1] 展开全文
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 [1]
信息
更新时间
2019年9月4日 [2]
源码模式
自由及开放源代码软件
发行日期
2008年9月23日
软件许可
Apache License、 GPL等
创始人
安迪·鲁宾(Andy Rubin)
软件语言
C/C++(底层) Java,Kotlin等(应用层)
开发商
Google、开放手持设备联盟
发行商
Google - 谷歌(美国)
软件版本
Android 10(正式版) [2]
软件平台
Google
内核类型
宏内核(Linux内核)
测试版本
Android 11 Developer Preview 3(开发者预览版)
系统家族
类Unix,Linux
软件名称
Android(安卓)
Android系统简介
Android一词的本义指“机器人”,同时也是Google于2007年11月5日 Android logo相关图片(33张) 宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。(Android logo 相关图片相册图片来源:)
收起全文
精华内容
参与话题
  • Android开发精典案例60个【源码】

    千次下载 热门讨论 2020-07-28 23:32:54
    60个Android开发精典案例,好东西 - 给大家分享60个Android开发的精典案例,包含任务监听、设备适配,游戏框架搭建,特效实现,多点触控,网络协议,游戏关卡设置等内容。特别是做游戏开发的朋友值得研究。喜欢就拿...
  • 全课程由浅入深、系统全面地讲解了Android软件开发的方方面面。 讲师具有在北大青鸟,东软睿道等IT培训机构的10年以上培训经验。 带领你搭建Android开发环境,完成你的第一个Android程序。 完整地讲解了Android...
  • 安卓开发——登录界面

    万次阅读 多人点赞 2018-09-19 09:00:50
    安卓系统体系架构思维导图

    项目功能需求:
    1> 点击登录按钮,登录成功与否必须有对应的响应事件。
    2> 点击取消按钮,可以退出程序。
    3> 用户名文本框和密码框可以接收由键盘输入的数据,且分别有提示信息。(密码框显示输入的内容不显示)
    4> 要有背景图片

    效果图

    在这里插入图片描述
    一、安卓结构布局分析,外层布局一共有四层为垂直布局,第二三四层内嵌布局为水平布局。
    二、线性布局概述
    线性布局(LinearLayout)是一种比较常用且简单的布局方式。在这种布局中,所有的子元素都是按照垂直或水平的顺序排列在界面上。如果是垂直排列,每个子元素占一行,如果是水平排列,则每个子元素占一列。线性布局可以支持布局样式嵌套实现复杂的布局样式。

    layout文件夹下面的activity_main.xml为布局文件
    LinearLayout标签的常用属性有:
    (1)layout_width:布局宽度(match_parent(适应屏幕宽度)、wrap_content(包裹宽度))
    (2)layout_height:布局高度(match_parent(适应屏幕高度)、wrap_content(包裹高度))
    (3)orietation:方向(vertical(垂直),horizontal(水平))
    (4)gravity:对齐方式(left, right, center……)
    (5)background:背景(颜色、图片)
    三、导入背景图片

    TextView为文本标签,其常用属性有:
    (1)text(文本)【建议文本内容在values下的string.xml中自行定义,例:android:text="@string/login" ;其中login是string.xml文件中的name属性】

    (2)textSize(字体大小)【字体大小单位一般用sp,例:android:textSize=“25sp”】
    (3)textColor(字体颜色)【例:android:textColor="#ff00ff"】
    EditText为可编辑文本框,其常用属性有:
    (1)hint(提示信息)【例:android:hint="@string/et_username"】
    (2)singleLine(单行显示)【属性:(true、false)例:android:singleLine=“true”】
    (3)inputType(输入类型)【属性:(textPassword、datetime、text)例:android:inputType=“textPassword”】
    Button为按钮标签
    提示:为了方便添加事件,每个标签可以增加 ID 属性,格式为:android:id="@+id/bt_log"
    三、按照布局分析将各个标签进行排版布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@mipmap/b2"
        android:gravity="center"
        android:orientation="vertical"
        tools:context="com.example.admin.register.MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/login"
            android:textSize="25sp"
            android:textColor="#ff00ff"
             />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal">
    
            <TextView
                android:id="@+id/tv_username"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tv_username"
                android:textSize="20sp"
                android:textColor="#000000"/>
    
            <EditText
                android:id="@+id/et_username"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:hint="@string/et_username"
                android:singleLine="true"
                />
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal">
    
            <TextView
                android:id="@+id/tv_password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tv_password"
                android:textSize="20sp"
                android:textColor="#000000"/>
    
            <EditText
                android:id="@+id/et_password"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:hint="@string/et_password"
                android:inputType="textPassword"
                />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal">
    
            <Button
                android:id="@+id/bt_log"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/bt_log"/>
    
            <Button
                android:id="@+id/bt_bos"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/bt_bos"/>
    
        </LinearLayout>
    
    </LinearLayout>
    
    

    四、打开values文件下面的string.xml文件,在文件中定义layout文件夹下面的activity_main.xml中所需文本。

    <resources>
        <string name="app_name">Register</string>
        <string name="login">用户登录</string>
        <string name="tv_username">用户:</string>
        <string name="tv_password">密码:</string>
        <string name="bt_log">登录</string>
        <string name="bt_bos">取消</string>
        <string name="et_username">输入用户名</string>
        <string name="et_password">输入密码</string>
    </resources>
    
    

    五、打开JAVA文件夹下MainActivity文件添加事件响应。

    为用户名文本框、密码框、登录按钮、取消按钮定义变量。

    通过资源标识获得控件实例,因为类型不同所以要进行强制转换。

    给登录按钮注册监听器,实现监听器接口,编写事件(注:使用匿名内部类)

    Toast是Android系统提供的一种提醒方式,不会占用任何的屏幕空间,所以可以将一些简短的信息通过toast的方式通知给用户,这些信息过一段时间会自动消失
    第一个参数:MainActivity.this,当前的上下文环境
    第二个参数:要显示的字符串,就是你想在屏幕上显示的内容
    第三个参数:显示的时间长短,就是这个字符串在屏幕上显示的时长。Toast默认的有两个LENGTH_LONG(长)和LENGTH_SHORT(短)。
    show(); 显示

    给取消按钮注册监听器,实现监听器接口,编写事件

    finish(); 终止

    package com.example.admin.register;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        private EditText et_username;
        private EditText et_password;
        private Button bt_log;
        private Button bt_bos;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //利用布局资源文件设置用户界面
            setContentView(R.layout.activity_main);
    
            //通过资源标识获得控件实例
            et_username = (EditText) findViewById(R.id.et_username);
            et_password = (EditText) findViewById(R.id.et_password);
            bt_log = (Button) findViewById(R.id.bt_log);
            bt_bos = (Button) findViewById(R.id.bt_bos);
    
            //给登录按钮注册监听器,实现监听器接口,编写事件
            bt_log.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //获取用户输入的数据
                    String strUsername = et_username.getText().toString();
                    String strPassword = et_password.getText().toString();
    
                    //判断用户名和密码是否正确(为可以进行测试,将用户名和密码都定义为admin)
                    if(strUsername.equals("admin") && strPassword.equals("admin")){
                        Toast.makeText(MainActivity.this,"用户名和密码正确!",Toast.LENGTH_SHORT).show();
                    }else {
                        Toast.makeText(MainActivity.this,"用户名或密码错误!",Toast.LENGTH_SHORT).show();
                    }
    
                }
            });
            //给取消按钮注册监听器,实现监听器接口,编写事件
            bt_bos.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        }
    }
    
    

    以上就是安卓开发登录界面的的过程

    展开全文
  • 安卓 四大组件

    万次阅读 2018-06-29 11:16:46
    Android开发的四大组件 Android四大组件分别为activity、service、content provider、broadcast receive 一、Activity Activity生命周期的方法是成对出现的 onCreate() &amp; onDestory() onStart() ...

    Android开发的四大组件
    Android四大组件分别为activity、service、content provider、broadcast receive
    一、Activity
    这里写图片描述
    Activity生命周期的方法是成对出现的

    onCreate() & onDestory()
    onStart() & onStop()
    onResume() & onPause()

    每一个活动( Activity)都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。 但是当一个活动的状态发生改变的时候,开发者可以通过调用onXX() 的方法获取到相关的通知信息。 在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候来调用。
    一,onCreate:当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate方法有一个参数,该参数可以为空(null),也可以是之前调用onSaveInstanceState方法保存的状态信息。 二,在onStart:方法该触发的所属表示将活动被展现给用户四,在onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。 五,onStop:当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发onStop方法。所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开 者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,在onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。六,onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。七,onDestroy:当活动销毁的时候,触发该方法。和onStop方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法·。 的onSaveInstanceState:系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等活动栈

    每个Activity的状态是由它在Activity栈(是一个后进先出LIFO,包含所有正在运行Activity的队列)中的位置决定的。
    当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。
    这里写图片描述
    一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。
    Activity状态
    Activity有以下四种状态:
    活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。
    暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。
    当被暂停,一个活动仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下,机器人将会杀死一个暂停的活动来为活动的活动提供充足的资源。当一个活动变为完全隐藏,它将会变成停止。停止:。当一个活动不是可视的,它“停止”了这个活动将仍然在内存中保存它所有的状态和会员信息尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。当一个活动停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个活动退出或关闭了,它将变为待用状态。待用:。在一个活动被杀死后和被装在前,它是待用状态的待用胡亚蓉被移除活动栈,并且需要在显示和可用之前重新启动它的活性的四种加载模式在机器人的多活性开发中,活动之间的跳转可能需要有多种方式,有时是普通的生成一个新实例 有时希望跳转到原来某个活动实例,而不是生成大量的重复的活性。加载模式便是决定以哪种方式启动一个跳转到原来某个活动实例。在机器人里,有4种活性的启动模式,分别为:·standard:标准模式,一调用startActivity()方法就会产生一个新的实例。·singleTop:如果已经有一个实例位于Activity stack的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。·singleTask:会在一个新的任务中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。

    ·singleInstance:这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。
    这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。
    相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
    标志,这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。1、Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
    2、intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    3、startActivity(intent);
    复制代码
    Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。

    FLAG_ACTIVITY_NEW_TASK
    FLAG_ACTIVITY_CLEAR_TOP
    FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
    FLAG_ACTIVITY_SINGLE_TOP

    核心的特性有:

    taskAffinity
    launchMode
    clearTaskOnLaunch
    alwaysRetainTaskState
    finishOnTaskLaunch

    四种加载模式的区别 所属task的区别
    一般情况下,“standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,就相当于谁调用它,它就跟谁在同一个Task中。
    除非Intent包括参数FLAG_ACTIVITY_NEW_任务。如果提供了FLAG 活动新_ TASK参数,会启动到别的任务里。“singleTask”和” singleInstance”总是把要启动的活动作为一个任务的根元素,他们不会被启动到一个其他任务里。是否允许多个实例“standard”和“singleTop”可以被实例化多次,并且是可以存在于不同的任务中;这种实例化时一个任务可以包括一个activity的多个实例; “ singleTask“和”singleInstance“则限制只生成一个实例,并且是task的根元素。singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不创建新的实例。是否允许其它活动存在于本任务内“singleInstance”独占一个任务,其它活动不能存在那个任务里; 如果它启动了一个新的活动,不管新的活动的启动模式如何,新的活动都将会到别的任务里运行(如同加了FLAG 活动 NEW_TASK参数)。而另 三种模式,则可以和其它活动共存。是否每次都生成新实例

    “standard”对于每一个启动Intent都会生成一个activity的新实例;
    “singleTop”的activity如果在task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。
    “singleInstance”是其所在栈的唯一activity,它会每次都被重用。
    “singleTask” 如果在栈顶,则接受intent,否则,该intent会被丢弃,但是该task仍会回到前台。
    当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法,如果收到intent生成一个activity实例,那么用户可以通过back键回到上一个状态;如果是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。
    ———————————–
    二、Service
    service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。
    Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中
    通过来声明。可以通过contect.startservice和contect.bindserverice来启动。
    Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。

    启动service,根据onStartCommand的返回值不同,有两个附加的模式:
    1、START_STICKY 用于显示启动和停止service。
    2、START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要处理时才运行的模式。
    服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。
    1、 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
    如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。
    如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
    采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
    2、使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
    onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用的onDestroy()方法。拥有服务的进程具有较高的优先级1.如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被杀死。2.如果当前服务已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着服务一般不会被杀死。3。如果客户端已经连接到service(bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。4.如果service可以使用startForeground(int,Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时被杀。如果有其他的应用组件作为服务,活动等运行在相同的进程中,那么将会增加该进程的重要性。本地服务1.不需和活动交互的本地服务2.本地服务和活动交互\ ———————–

    三、Broadcast Receiver
    是一个全局的监听器,属于Android四大组件之一
    作用是监听 / 接收 应用 App 发出的广播消息,并 做出响应
    应用场景为

    1、Android不同组件间的通信
    2、多线程通信
    3、与Android系统在特定情况下的通信


    四、Content Provider详解

    ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。
    android中对数据操作包含有:
    file, sqlite3, Preferences,ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。
    android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。
    使用方式:
    一个应用实现ContentProvider来提供内容给别的应用来操作,
    一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。
    1.ContentProvider
    Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,当然前提是已获得适当的读取权限。

    2.ContentResolver
    当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。
    3.Uri
    Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
    第一部分是”content://”。可以看作是网址中的”http://”。
    第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作是网址中的主机名,比如”blog.csdn.net”。
    第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。

    作者:陈进杨

    原文链接:点击这里

    展开全文
  • 2018年的安卓开发环境搭建

    万次阅读 2018-12-01 18:05:36
    记得超早以前我就弄过一次Eclipse上的ADT安卓开发环境搭建,不过过了这么多年,安卓系统已经更新换代这么多次,开发工具也早就换成了Android Studio。正好这几天看了一下当年买了没怎么看的安卓开发书籍,顺便更新一...

    记得超早以前我就弄过一次Eclipse上的ADT安卓开发环境搭建,不过过了这么多年,安卓系统已经更新换代这么多次,开发工具也早就换成了Android Studio。正好这几天看了一下当年买了没怎么看的安卓开发书籍,顺便更新一波。最后提醒一下,如果无法科学上网的话,很难完全照着本文的步骤来,因为很可能会卡在某个地方的。

    安装Android Studio

    安卓官网在国内无法访问,不过谷歌为了中国开发者,专门弄了一个中国开发者网站,国内可以轻松打开,页面也和国际官网一模一样。

    然后点击网站上的Android Studio标签,或者直接访问这里,就可以下载Android Studio了。下载完成之后点击安装,稍等片刻就安装完毕了。

    安装Android Studio

    比较有意思的是,我这里从dl.google.com上下载AS和安卓SDK的时候,居然可以无需科学上网直接下载。不知道大家的情况是怎样的。

    设置环境变量

    其实这一步不算必须的,如果你感觉你C盘够大的话。就我个人体验,我的240G固态已经不能满足需求了,前几天满了我还不得不重装了一次系统(下次买硬盘一定要买1T的固态)。

    首先设置ANDROID_SDK_ROOT环境变量,值设置为安卓SDK文件夹存放位置。

    然后设置ANDROID_AVD_HOME环境变量,值设置为安卓模拟器的存放位置。

    设置环境变量

    首次启动Android Studio

    准备就绪之后就可以启动AS了,不过不出意外的话你肯定会看到这个错误信息。

    无法获取信息

    有代理的同学直接设置一下代理就完事了,如果没有代理,可以在AS安装目录中寻找bin/idea.properties文件,然后在最后添加下面一行,应该就可以直接打开了。如果前面可以直接下载AS的话,那么应该也可以直接下载SDK,可以试试直接点取消会怎样,如果能直接进入首次启动页面,就不用修改文件了。

    disable.android.first.run=true
    

    如果顺利的话,就会显示这么一个初次运行对话框,引导我们设置AS,第一步会询问是标准(Standard)还是自定义(Custom),当然选择自定义了。
    设置AS

    首先是主题设置,我当然是选择深色主题了。
    主题设置

    然后是下载/更新SDK,按照需求选择即可,由于我是AMD处理器,无法使用英特尔加速,所以没选那个。记得修改一下SDK安装位置,这里好像不认前面设置的环境变量。

    安装SDK

    这里提示一下,如果你重装过系统,而且原来的安卓SDK还在的话,可能会在这里出现安装错误。我出现的错误是找不到下载目录,仔细检查后发现,AS会尝试下载到以前的用户临时文件夹中,但是我用户名改过了,所以就出错了。我的解决办法是把原来的SDK全删了重新下载一次。

    最后如果一切顺利的话,应该就会成功显示AS主界面了。

    Android Studio界面

    配置Android Studio

    安装算是终于完成了,还要配置一下Android Studio才能比较舒服的使用。点击Configure->Settings,就可以打开配置对话框。

    设置代理

    这一步基本上很难绕过去,因为现在的安卓程序使用gradle构建,而且默认使用的方式是gradle wrapper,wrapper方式的优点是无需本机事先安装gradle,因为实际上wrapper程序会代你自动下载gradle,而没有代理的话gradle wrapper这一步基本上就会完全卡死。很多人不喜欢gradle的原因就在于此。

    设置代理

    设置字体

    默认字体小的可怜,而且是通用等宽字体monospaced,作为天天要看的代码字体,肯定必须要做修改。Windows自带的Consolas字体是一个非常不错的选择。如果电脑上同时安装了Visual Studio,应该也会同时安装Lucida Sans Typewriter字体,也很美观。此外,Liberation Mono和Monaco也是不错的字体,我个人比较喜欢Liberation Mono,越看越耐看。

    图片.png

    插件安装

    我感觉必装的插件有.ignore(自动生成排除文件,谁用谁知道)还有Key Promote X(自动提示你鼠标点击的按钮的键盘快捷键,帮助你快速了解IDE的常用快捷键)。

    Jetbrains系软件的插件还有很多很有意思的,比方说让你自定义代码背景图片的Background Image Plus,还有让你写代码时候增加特效的Power Mode II (模仿自Atom的Activate Power Mode)等等,有兴趣的同学可以安装一下它们。

    安装插件

    新建项目

    全部配置完毕之后,让我们来创建一个新项目看看AS的效果如何。首先点击开始创建新项目。
    创建新项目

    然后输入项目信息,现在Kotlin正火,谷歌也将其收入为安卓官方支持语言,那么我们自然也顺便添加Kotlin支持。

    输入项目信息

    然后选择项目的安卓SDK版本,默认推荐的只安装了安卓P的SDK,如果你选择了其他的版本,还需要额外下载SDK。其实这里也可以看到安卓的碎片化实在是太严重了。目前里谷歌发布安卓P已经有了半年左右时间了,设备更新率只有可怜的不到1%,国内动作比较快的华为和小米也才刚刚开始推送安卓P更新。

    选择SDK版本

    然后是选择界面样式,由于是示例项目,随便选一个就可以了,我选择了空活动。
    选择界面样式

    最后是设置主活动类的名称,默认即可。
    设置主活动名称

    最后就是漫长的等待时间了。如果你没有代理,这个时间可能永远无法结束。就算我有代理,第一次构建也花了很长时间。因为Jetbrains系的软件为了增加提示和代码补全的智能程度,需要对很多东西做索引,所以第一次构建实际上会做以下工作(包括但可能不限于):

    • gradle wrapper下载gradle
    • gradle下载项目所需依赖包
    • gradle启动后台进程并开始执行构建
    • AS对安卓SDK、JDK、项目依赖包的索引

    这一套组合拳下来可能网速慢的十几分钟就没了,这也是gradle常常被人黑的原因。不过忍受过这难熬的第一次之后,gradle的优势就体现出来了。

    项目代码

    最后就来运行一下我们的安卓项目。如果你是英特尔CPU,而且前面安装了自带的预配置好的优化版x86安卓模拟器,现在可以直接点击Tool -> AVD Manager,打开虚拟机管理器,然后直接点击绿色运行按钮来启动。

    运行预配置安卓模拟器

    很遗憾我用的AMD锐龙处理器,所以无法运行x86安卓模拟器,准确的说是无法在关闭HyperV的情况下运行,因为我同时还要运行其他虚拟机软件。所以只能使用另一种办法,那就是直接在手机上运行。用USB连接将手机和电脑连接在一起,在手机上打开USB调试,按照设置不同可能还需要顺便打开USB安装和允许USB模拟点击等几个选项。当然需要注意的是这些选项会直接在手机上安装应用。所以最好只在自己电脑上开启USB调试,在公共场合不要开启。

    手机准备就绪之后点击Run -> Run app,就会打开设备列表对话框,同时在手机上提示是否允许USB连接。确定之后,AS就会正确识别手机设备了。由于我手机小米8的安卓P稳定版尚未推送,所以还正好无法运行安卓P的应用,我还特地在gradle配置文件中将minSdkVersion修改为27,才能正好运行。

    设备列表

    稍等一下手机上就会安装上这个程序,然后打开即可。
    手机效果

    这样一来,一个崭新的安卓开发环境就搭建完毕了。之后就可以好好开始学习如何开发安卓程序了。

    展开全文
  • Google I/O 2019开发者大会上,谷歌正式公布了安卓系统的全新版本Android Q,这一版本也被称作Android 10,是安卓的第十个主要版本。 现在的安卓已经在全球超25亿设备上激活运行,在手机上更是拥有了大...

    Google I/O 2019开发者大会上,谷歌正式公布了安卓系统的全新版本Android Q,这一版本也被称作Android 10,是安卓的第十个主要版本。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    现在的安卓已经在全球超25亿设备上激活运行,在手机上更是拥有了大部分的市场份额。

    历经十余年时间,进化到第十个大版本的安卓如今都有怎样的能耐?

    安卓Q的新鲜功能

    诸多新功能中最令人瞩目的,当然是全新的手势操作:如今底部的虚拟按键简化成了极窄的导航条。操作也变成了从屏幕向上划是返回桌面,划得稍短一点则会在手机震动后进入多任务界面,而返回操作变成了从屏幕左右两侧向内划。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    全新手势操作的出现,意味着安卓阵营在全面屏手机时代该如何进行操作有了一个定论,即是在MIUI上首次出现的全面屏手势。虽然并不是完全原创,但操作方便学习简单。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    这也意味着在Android 9上短暂出现的“药丸”home键操作,在服役短短一年之后就告别历史舞台,不过对于国内的安卓用户并没有太大影响,大多数用户都随着手机厂商提前进入了全面屏手势操作。

    另一个肉眼可见的明显变化,是全局夜间模式。在此前曾出现过系统UI能变成深色的夜间模式,而在全局夜间模式中,支持夜间主题功能的应用也能随着系统一同变成深色,现在我们能看到变成深色的电话、短信、日历等应用。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    在OLED屏开始在手机上流行的现在,全局夜间模式明显能帮助我们更省电更护眼地使用手机。至于还没有提供夜间主题支持的应用,系统中还加入了强制变暗的功能,可以将应用直接转换为深色界面。

    更进一步的权限管理此前已经在首个测试版初见端倪,现在可以像iOS那样,将应用获取定位的权限设置为尽在应用运行时可用。如此一来,不仅隐私管理可以更加安全,应用随意调取定位产生的耗电也能被遏制。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    请求权限通知的弹窗也改变了交互逻辑,从原来的小区域横向放置,改为了大按钮纵向放置,一上一下区分允许和拒绝,就不会出现因为太近而被按错的情况。

    在访问无线网络时,可以设置为随机MAC地址。这样广告商就无法跟踪手机的固定MAC,也就无法根据你上网时的喜好来给你推送定制化广告。当然,想要从MAC地址知道你在哪的人,这下也得另寻他路。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    应用通知得到了进一步简化,之前的版本中出现了应用通知分组和非常详细的通知设定项,但这对于普通用户来说未免有些眼花缭乱。现在直接改为了提醒我、静音通知和屏蔽三个大的选项,剩下的细节交给系统帮忙完成,可以说非常省心。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    这样的通知设计也与国产定制系统和iOS中的通知收纳/静音设计类似,既保证了能够接收到应用通知,又不会让通知打扰到日常使用。正式版中会不会出现不重要通知收纳或是同应用通知重叠,还得看未来的版本。

    开发者选项中加入了主题设置项,可以对系统强调色、字体和图标样式进行修改。虽然系统还没有像壁纸那样提供显眼的入口,但可以想象,未来安卓将获得更方便更多样的“无痛化”界面自定义功能。对于想要在手机个性化有更多动作的用户,应该有福了。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    还有一些交互上的优化,比如说分享界面更加易用,不仅唤起速度增快还能直接分享链接;Wi-Fi密码可以直接通过二维码分享;桌面上手滑删掉的快捷方式也能即时撤回;用安装包安装应用也只会弹出小窗口,而不是之前的全屏。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    基于数字健康功能,新系统加入了专注模式。如同字面意义那样,通过对应用通知、使用时长等功能的切断,让你不再分心去使用手机专注于当前的工作。在定制系统上,我们或许能看到国产厂商本地化后的专注模式。

    谷歌还在Android Q藏了个小小的野心:桌面模式。在窗口化运行的基础上更进一步,允许手机连接屏幕显示出独立的桌面,还能多窗口同时允许多个应用。看起来吸收了Windows的设计思路,以及三星DeX和华为桌面模式、锤子TNT等的精髓。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    桌面模式的出现,暗示着谷歌在桌面级登陆的野心。至于这份野心具体会是安卓与Chrome OS融合,或是再度推出安卓平板,还是Pixel 4将支持桌面模式输出,等到今年秋季就能有定论。

    Android Q还有机会得到可离线使用的小型化AI,谷歌已经在大会上现场展示。得益于被压缩到500MB左右的本地数据包,语音助理可以快速、精准地响应语音指令,不用等待与服务器沟通。甚至还支持随时的上下文沟通,不需要反复去说让人害羞的唤醒词。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    虽然谷歌还没有推出相关产品,但Android Q也加入了对折叠屏的支持。无论是展开还是折叠,应用都能持续使用而不中断,仅有界面的大小发生变化。不过我们离折叠屏手机的时代还有相当的距离,未来还是个不定数。

    升级机型预测

    说完了Android Q的种种新功能,接下来让人关心的就是什么时候可以升级到新系统。

    首先是安卓阵营的领头人谷歌,目前谷歌旗下有Pixel系列手机,在拥有完整的最新版安卓系统特性的同时,还能得到谷歌的独家优化。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    不出意外的话,Pixel全系列手机将随着Android Q在今年秋季的正式发布同时得到更新,想要最先体验到正式版肯定是首选Pixel。

    作为安卓阵营的重要OEM厂商,三星为旗下机型推送Android Q的时间可能会稍晚一些。按照往年的时间点,三星下半年旗舰Galaxy Note10会早于Android Q正式发布,所以这款手机不会出厂预装新系统。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    从三星近几年的更新速度来看,Galaxy Note 10与Galaxy S10系列这两个2019年旗舰将会最先得到更新,之后是Galaxy Note9与Galaxy S9系列。待到明年年中,三星在今年主推的A系列等中低端手机,才会正式得到Android Q。

    华为在安卓厂商中,是提供系统更新相对积极的一家。由于下半年旗舰Mate系列发布时间都晚于Android Q正式发布,所以Mate 30系列有望预装基于Android Q的EMUI 10,之后推出的机型亦是如此。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    Mate 20系列、P30系列等麒麟980处理器机型,有望在Mate 30系列发布会后第一时间得到更新。Mate 10系列和P20系列等麒麟970处理器机型则可能等到第二批,至于Mate 9系列等更老的机型以及中低端产品,则需要等待华为具体通知。

    荣耀的更新机型和具体时间可能与华为相近,Magic 2和荣耀V20、荣耀20系列为主的麒麟980处理器机型第一批得到Android Q更新,荣耀V10和荣耀10等麒麟970处理器机型稍晚,中低端机型也得依据具体通知来看。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    小米近年来按照谷歌对厂商的要求,执行着一般提供两个大版本更新的策略。出厂系统基于Android 9的小米9系列和红米Note 7系列,还有即将发布的红米K20系列可能是最早升级Android Q的机型,目前小米9已经可以刷入预览版的原生Android Q。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    小米8、小米MIX2S和小米6X等手机将迎来第二次大版本更新,而其余的中低端手机,小米可能会安排在更晚的批次来进行更新。

    OPPO目前已经有Reno得到了Android Q预览版适配,相信未来也能够得到基于ColorOS 6的正式版更新。今年一并上市的Reno 10倍变焦版以及去年底登场的R17系列,也有望得到新版安卓更新。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    vivo也有X27可以刷入适配的Android Q预览版,未来或许会有X27 Pro、S1、S1 Pro、iQOO、X23、NEX以及NEX双屏版等机型得到更新,按照传统也会是基于最新版FuntouchOS定制。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    魅族对于更新安卓大版本一事并不算很热情,但未来会上市的新机型有望预装Android Q,今年的新旗舰魅族16s或许也会有更新的可能性。

    一加则是对更新安卓版本有十足热情的品牌,前不久他们还为一加3、一加3T提供了Android 9更新。不过未来会更新Android Q的机型顺序可能会是即将发布的一加7、一加7 Pro,一加6和一加6T以及较老的一加5和一加5T。

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

    努比亚得到Android Q更新的机型可能会是红魔3、红魔Mars、努比亚X和努比亚Z18。

    索尼旗下可能有Xperia 1、Xperia XZ3、Xperia XZ2 Premium、Xperia XZ2、Xperia XZ2 Compact、Xperia 10、Xperia 10 Plus等近两年推出的机型得到Android Q更新。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    htc往年是更新安卓版本较为积极的厂商,但近年来经营不善,导致去年承诺更新Android 9的机型只有U12+、U12、U11+、U11 Life (Android One)。但在U12+国行版迟迟得不到更新的情况下,htc恐怕难有余裕为旧机型提供Android Q。

    联想虽然还没能回归主流手机厂商,但也会为手机提供安卓更新,使用骁龙855的Z5 Pro GT和Z6 Pro有望得到官方的Android Q更新。

     

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    moto的国际版系统都以轻定制版安卓为主,今年刚推出的G7系列,以及旗舰Z3和低端的E系列都有机会得到Android Q,基于Android One的moto One系列手机也同样如此。

    诺基亚同样选择了定制化不多的系统,不少机型也加入了Android One,所以近两年推出的机型如诺基亚X71、诺基亚8.1、诺基亚X6等都有机会在较快的时间内升级Android Q。

    安卓10终于来了,能吃上的果然只有这些手机!

     

     

     

    由于安卓并不是像iOS那样由单一厂商推出设备,所以各厂商的安卓手机并不能在同一时刻得到更新。而且由于各厂商的定制需要,系统更新的功能和时间也会有些许出入。

    想要体验到系统更新更快,功能更齐全或者是更适合自己的手机,就得多加考虑一番。

    展开全文
  • 安卓面试基础(如会必过)

    千次阅读 多人点赞 2019-01-09 09:42:57
    Activity 1、 什么是Activity? Activity是四大组件之一,他给用户的感受就是一个用户交互界面。一个Activity就是一个可见的界面。 他的特点是:1、可见 2、可交互 他之所以可交互,是因为他同时实现了Window....
  • 用VS2017开发安卓应用

    万次阅读 2018-12-21 00:46:15
    vs2017自安装以后就没怎么打开过,虽然12出的时候用10,15出的时候用13,17出的时候用15,但我依然坚持不用也装上再说的理念。 1、vs2017开发IOS和An...
  • 一、如何下载安卓系统源码

    千次阅读 2019-01-25 16:59:40
    此网站和 Android 开源项目 (AOSP) 代码库可为您提供所需信息和源代码,供您创建定制的 Android 操作系统版本,将设备和配件移植到 Android 平台,同时确保您的设备符合兼容性要求,从而让 Android 生态系统维持良好...
  • 一个人写的操作系统 - Sparrow OS

    千次阅读 2013-12-21 16:19:23
    原文: 一个人写的操作系统 - Sparrow OS 链接:http://blog.csdn.net/michael2012zhao/article/details/17421383 分类: Sparrow操作系统 2013-12-19 19:25 1734人阅读 评论(16) 收藏 ...一个
  • iOS 之苹果运行机制总结

    万次阅读 2018-04-09 14:15:42
    解释一下iOS内存机制,为什么iOS的RAM一直都是最少的但iOS却又是最最流畅的。大神请直接忽略此帖,仅希望小白们看过后不会再因为担心iPad内存不足而到处纠结1G RAM 2G RAM了那档子事了...这些帖子楼主看得眼睛都疼了...
  • Swing窗口去掉标题栏

    千次阅读 2014-02-21 16:35:24
    public class Main {  public static void main() {  Frame frame = new Frame();  frame.setUndecorated(true); ... // Get the current decorated state ... boolean undecorated = frame....
  • 获取安卓手机设备名称 最近公司有个需求,需要获取安卓手机的设备名称 搜了一大波资料后发现大多数获取设备名称的方法都是通过android.os.Build这个类拿到的,但是这种方法只能拿到手机型号啊,不能拿到设备名称=_...
  • Android 退出应用程序的 6 种方式

    万次阅读 2018-06-21 14:01:07
    我们先来看看几种常见的退出方法(不优雅的方式) 一、容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有...import android.app.Activity; import android.os.Bundle; public cla...
  • Android 设置字体加粗属性

    千次阅读 2016-09-08 10:26:32
    android:textStyle=”bold”
  • Android 6.0、7.0、8.0、9.0差异、适配

    千次阅读 2018-12-11 15:54:23
    一、6.0适配 谈谈Android 6.0 的动态权限管理 二、7.0适配 Android 7.0脱坑指南 三、8.0适配 Android 8.0适配指北 四、9.0适配 Android P 兼容与适配 五、屏幕适配 推荐一种非常好用的Android屏幕适配 ...
  • Android设置文字粗体的方法

    万次阅读 2011-12-18 00:24:57
    Android设置文字粗体的方法: testTextView=(TextView) findViewById(R.id.testTextView); testTextView.getPaint().setFakeBoldText(true); 英文和数字可以直接用XML去设置: android:textStyle="bold
  • Android 安卓DataBinding详解(超详细)

    千次阅读 2019-12-22 20:52:36
    Android 安卓DataBinding(时刻更新、维护一下文章) Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBindin...
  • 安卓啥都不会】idea运行android项目

    千次阅读 2019-06-28 10:36:59
    第一步 第二步 第三步 选择模拟器 也可以自己创建模拟器 启动完成
  • Android自定义弹出框实现(修改版)完整实例源码

    千次下载 热门讨论 2020-07-28 23:32:37
    android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
1 2 3 4 5 ... 20
收藏数 2,420,942
精华内容 968,376
关键字:

安卓