精华内容
下载资源
问答
  • 通过图片的url获取到图片,并显示到imageview中,本实例中选择的图片的百度官网的logo。仅提供一种获取网络图片的方法。
  • 文章目录Android版本对照表 Android版本对照表 Android版本 API级别 VERSION_CODE ...可能会遇到无法保存图片到本地,或者造成Permission denied等问题,具体解决方案参考:《关于安卓open fai

    文章目录


    对照表

    Android版本API级别VERSION_CODE重大改进或变更开发注意事项
    Android12.031S沉浸模式下的手势导航改进、前台服务通知延迟、对 Netlink MAC 地址的限制、不受信任的触摸事件被屏蔽、应用无法关闭系统对话框行为变更:以 Android 12 为目标平台的应用
    Android 11.030R强制执行分区存储机制、单次授权、自动重置权限、后台位置信息访问权限、软件包可见性、前台服务Android 11 隐私设置更新
    Android 10.029Q引入分区存储可能会遇到无法保存图片到本地,或者造成Permission denied等问题,具体解决方案参考:《关于安卓open failed: EACCES (Permission denied)
    Android 9.028P网络连接变更自9.0起,默认不再支持http请求,如果需要支持,需要按 《Android9.0 http无法访问的解决方案 》进行修改和编辑
    Android 8.127O_MR1--
    Android 8.026O8.0系统的通知栏适配参考 郭霖的 《8.0系统的通知栏适配
    Android 7.1.1 & Android 7.125N_MR1--
    Android 7.024N系统权限更改参考《Android 7.0 行为变更
    Android 6.023M运行时权限需要动态申请权限,对于以 Android 6.0(API 级别 23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission( ) 方法。要请求权限,请调用新增的 requestPermissions( ) 方法。
    Android 5.122LOLLIPOP_MR1--
    Android 5.021LOLLIPOPAndroid 5.0 新增了material design样式的支持参考《Android 5.0 变更
    Android 4.4W20KITKAT_WATCH-仅限 KitKat for Wearables
    Android 4.419KITKAT外部存储空间读取权限、使用WebView、使用 AlarmManager、使用ContentResolver同步数据参考《Android 4.4 重要行为变更
    Android 4.318JELLY_BEAN_MR2--
    Android 4.2、4.2.217JELLY_BEAN_MR1--
    Android 4.1、4.1.116JELLY_BEAN--
    Android 4.0.3、4.0.415ICE_CREAM_SANDWICH_MR1--
    Android 4.0、4.0.1、4.0.214ICE_CREAM_SANDWICH--
    Android 3.213HONEYCOMB_MR2--
    Android 3.1.x12HONEYCOMB_MR1--
    Android 3.0.x11HONEYCOMB--
    Android 2.3.4
    Android 2.3.3
    10GINGERBREAD_MR1--
    Android 2.3.2
    Android 2.3.1
    Android 2.3
    9GINGERBREAD--
    Android 2.2.x8FROYO--
    Android 2.1.x7ECLAIR_MR1--
    Android 2.0.16ECLAIR_0_1--
    Android 2.05ECLAIR--
    Android 1.64DONUT--
    Android 1.53CUPCAKE--
    Android 1.12BASE_1_1--
    Android 1.01BASE--

    以上重大改进和变更只是举例最有可能遇到的问题!并非全面,具体可参考以下内容

    Android官网-https://developer.android.com/guide/topics/manifest/uses-sdk-element





    展开全文
  • android安卓百度地图开发,实现输入起点,目的地实现导航功能,通过修改百度地图官方导航Demo实现的,代码简介,备注清晰详细,值得参考学习。
  • Android 安卓创建自己的依赖库(保姆级教程)

    万次阅读 多人点赞 2020-10-24 17:16:31
    文章目录新建工程,新建Module创建 Android Library输入你要创建module名字在Module中新建测试类上传github命名库上传代码上传演示创建release提交版本将库的地址复制下来进入jitpackGet it生成依赖工程级build....


    新建工程,新建Module

    新建一个工程,之后按下图中的操作方式,创建一个 Module

    在这里插入图片描述


    创建 Android Library

    选中 Android Library,之后点击Next!

    在这里插入图片描述


    输入你要创建module名字

    输入你要创建module名字,如果有,但请不要删除前面的两个冒号(可能会因AndroidStudio版本原因显示界面不一样)!之后点击Finish!

    在这里插入图片描述


    在Module中新建测试类

    如图,找到以下文件目录,在Module中新建测试类

    在这里插入图片描述

    在这里插入图片描述


    上传github

    之后要上传Github,导入JitPack,新建一个库

    在这里插入图片描述


    命名库

    输入你要创建的库名字,创建共有库,然后点击Create Repository创建!

    在这里插入图片描述


    上传代码

    创建好后会出现如图效果,可以按第一个红框中的命令进行上传!

    在这里插入图片描述


    上传演示

    在这里插入图片描述
    在这里插入图片描述


    创建release

    刷新界面后,点击如图位置,点击 Create a new release 来创建!

    在这里插入图片描述

    提交版本

    定义一个版本号,输入本次版本的标题和内容,最后点击 Publish release

    在这里插入图片描述


    将库的地址复制下来

    复制即可

    在这里插入图片描述


    进入jitpack

    https://jitpack.io/

    可直接用你的Github账号登录!

    追后将库的地址复制到如图中的输入框,最后点击Look up。

    在这里插入图片描述


    Get it

    点击Look up后,出现如图部分,点击 Get it 即可!

    在这里插入图片描述


    生成依赖

    生成依赖,按下图红字进行添加即可!

    在这里插入图片描述


    工程级build.gradle添加

    在这里插入图片描述


    项目中添加

    在这里插入图片描述

    最终测试

    最后测试,(可以新建一个工程,新建工程轻按上方添加那条依赖和jitpack.io),删除原先创建的Module,进行测试

    在这里插入图片描述


    查看这个类

    可以看到点击进去这个类,就是你写的测试Demo

    在这里插入图片描述


    课后总结

    如果要对自己的依赖库进行升级,还是按上方操作,上传github,重新去JitPack获取即可!

    展开全文
  • 人脸识别(Android 安卓技术专辑)

    千次下载 热门讨论 2016-01-08 17:31:55
    人脸识别(Android 安卓技术专辑) -------------------------------安卓技术专题
  • Android安卓-开发一个android桌面

    万次阅读 热门讨论 2018-08-13 17:30:43
    从0开始 开发一个属于自己的桌面程序 最近在开发一个新项目,需要把应用改成桌面,并引导用户设置为...activity android:name=".activitys.DeskTop" android:launchMode="singleTop"> <intent-filter>...

    从0开始 开发一个属于自己的桌面程序

    最近在开发一个新项目,需要把应用改成桌面,并引导用户设置为默认桌面,完成后的效果如下图:

     

    1.添加XML

      <activity android:name=".activitys.DeskTop" android:launchMode="singleTop">
                <intent-filter>
                    <category android:name="android.intent.category.HOME" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <action android:name="android.intent.action.MAIN"></action>
                    <category android:name="android.intent.category.LAUNCHER"></category>
                </intent-filter>
            </activity>

    在主Activity里 添加

    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT" />

    这样用户在点按Home键的时候,就会弹出对话框,提示选择新的默认桌面

    2.主Activity布局文件

    布局比较简单,线性布局嵌套GridView,下面留了一点空袭是为了腾出空间放置拨号、短信常用APP

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:id="@+id/desktop_linear"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2">
            <GridView
                android:id="@+id/mgv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:numColumns="4"
                ></GridView>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="8"></LinearLayout>
    </LinearLayout>
    

    3.获取APP列表

    获取手机上已经安装的APP列表,同时过滤掉系统应用

    public static List<AppInfo> GetAppList1(Context context){
            List<AppInfo> list=new ArrayList<>();
            PackageManager pm = context.getPackageManager();
            Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
            mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            List<ResolveInfo> activities   = pm.queryIntentActivities(mainIntent, 0);
            for(ResolveInfo info : activities){
                String packName = info.activityInfo.packageName;
                if(packName.equals(context.getPackageName())){
                    continue;
                }
                AppInfo mInfo = new AppInfo();
                mInfo.setIco(info.activityInfo.applicationInfo.loadIcon(pm));
                mInfo.setName(info.activityInfo.applicationInfo.loadLabel(pm).toString());
                mInfo.setPackageName(packName);
                // 为应用程序的启动Activity 准备Intent
                Intent launchIntent = new Intent();
                launchIntent.setComponent(new ComponentName(packName,
                        info.activityInfo.name));
                mInfo.setIntent(launchIntent);
                list.add(mInfo);
            }
            return list;
        }

    AppInfo的类也放出来

    public class AppInfo {
        private String packageName; //包名
        private Drawable ico;       //图标
        private String Name;        //应用标签
        private Intent intent;     //启动应用程序的Intent ,一般是Action为Main和Category为Lancher的Activity
    
        public Intent getIntent() {
            return intent;
        }
    
        public void setIntent(Intent intent) {
            this.intent = intent;
        }
    
    
        public String getPackageName() {
            return packageName;
        }
    
        public void setPackageName(String packageName) {
            this.packageName = packageName;
        }
    
        public Drawable getIco() {
            return ico;
        }
    
        public void setIco(Drawable ico) {
            this.ico = ico;
        }
    
        public String getName() {
            return Name;
        }
    
        public void setName(String name) {
            Name = name;
        }
    }

    4.自定义BaseAdapter填充GridView数据

    public class DeskTopGridViewBaseAdapter extends BaseAdapter {
    
        Context context;
        List<AppInfo> appInfos=new ArrayList<>();
    
        public DeskTopGridViewBaseAdapter(List<AppInfo> appInfos,Context context){
            this.appInfos=appInfos;
            this.context=context;
        }
    
        @Override
        public int getCount() {
            return appInfos.size();
        }
    
        @Override
        public Object getItem(int position) {
            return appInfos.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder=null;
            if (convertView==null){
                convertView = LayoutInflater.from(context).inflate(R.layout.desktop_gridview_item,null);
                holder=new Holder();
                holder.ico=(ImageView) convertView.findViewById(R.id.iv);
                holder.Name=(TextView) convertView.findViewById(R.id.tv);
                convertView.setTag(holder);
            }else {
                holder= (Holder) convertView.getTag();
            }
    
            holder.ico.setImageDrawable(appInfos.get(position).getIco());
            holder.Name.setText(appInfos.get(position).getName());
    
            return convertView;
        }
    
    
        static class Holder{
            ImageView ico;
            TextView Name;
    
        }
    

     R.layout.desktop_gridview_item的布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">
    
        <ImageView
            android:layout_margin="5dp"
            android:id="@+id/iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxHeight="60dp"
            />
        <TextView
            android:layout_margin="5dp"
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:maxLines="1"
            android:text="Lable"/>
    </LinearLayout>
    

     

     

    5.在主Activity里填充数据,并给GridView的Item设置点击事件,点击图标之后打开该App

     private void initAppList() {
            appInfos=GetApps.GetAppList1(this);
            DeskTopGridViewBaseAdapter deskTopGridViewBaseAdapter=new DeskTopGridViewBaseAdapter(appInfos,this);
            mGridView.setAdapter(deskTopGridViewBaseAdapter);
    
            mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //                Intent intent=appInfos.get(position).getIntent();
    //                startActivity(intent);
    
                    Intent intent = getPackageManager().getLaunchIntentForPackage(appInfos.get(position).getPackageName());
                    if (intent != null) {
                        intent.putExtra("type", "110");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    }
    
                }
            });
        }

    到这里基本就打工搞成了,我们继续设置一下主Activity的背景为当前用户的桌面壁纸

     //设置背景
            WallpaperManager manager =WallpaperManager.getInstance(this);
            Drawable drawable=manager.getDrawable();
            linearLayout.setBackground(drawable);

    这里需要注意,需要动态申请这两个权限,注意 是动态申请

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    继续,弹出对话框,让用户设置为默认桌面,这里针对小米、华为、普通安卓都有处理,我直接把代码贴出来

    //桌面相关操作
    
    public class Desktop {
    
        private Context context;
    
        public Desktop(Context context) {
            this.context = context;
        }
    
        /**
         * 清除默认桌面(采用先设置一个空的桌面为默认然后在将该空桌面禁用的方式来实现)
         *
         */
        @SuppressLint("WrongConstant")
        public void clearDefaultLauncher() {
            PackageManager pm = context.getPackageManager();
            String pn = context.getPackageName();
            String hn = MockHome.class.getName();
            ComponentName mhCN = new ComponentName(pn, hn);
            Intent homeIntent = new Intent("android.intent.action.MAIN");
            homeIntent.addCategory("android.intent.category.HOME");
            homeIntent.addCategory("android.intent.category.DEFAULT");
            homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            pm.setComponentEnabledSetting(mhCN, 1, 1);
            context.startActivity(homeIntent);
            pm.setComponentEnabledSetting(mhCN, 0, 1);
        }
    
        //弹出选择默认桌面
        public void SetDefaultLauncher(){
            try {
                Intent  paramIntent = new Intent("android.intent.action.MAIN");
                paramIntent.setComponent(new ComponentName("android", "com.android.internal.app.ResolverActivity"));
                paramIntent.addCategory("android.intent.category.DEFAULT");
                paramIntent.addCategory("android.intent.category.HOME");
                context.startActivity(paramIntent);
            }catch (Exception e){
                e.printStackTrace();
            }
    
            try {
                Intent  paramIntent1 = new Intent("android.intent.action.MAIN");
                paramIntent1.setComponent(new ComponentName("com.huawei.android.internal.app", "com.huawei.android.internal.app.HwResolverActivity"));
                paramIntent1.addCategory("android.intent.category.DEFAULT");
                paramIntent1.addCategory("android.intent.category.HOME");
                context.startActivity(paramIntent1);
    
            }catch (Exception e){
                e.printStackTrace();
                startHuaweiSettingActOfDefLauncher();
            }
    
    
        }
        
        //打开华为设置页面,让用户选择默认桌面
        public void startHuaweiSettingActOfDefLauncher() {
            IntentFilter localIntentFilter = new IntentFilter();
            localIntentFilter.addAction(Intent.ACTION_MAIN);//"android.intent.action.MAIN"
            localIntentFilter.addCategory(Intent.CATEGORY_HOME);//"android.intent.category.HOME"
            Intent localIntent3 = new Intent(localIntentFilter.getAction(0));
            localIntent3.addCategory(localIntentFilter.getCategory(0));
            Intent localIntent4 = new Intent();
            localIntent4.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            localIntent4.setClassName("com.android.settings", "com.android.settings.Settings$PreferredSettingsActivity");
            localIntent4.putExtra("preferred_app_package_name", context.getPackageName());
            localIntent4.putExtra("preferred_app_class_name", context.getClass().getName());
            localIntent4.putExtra("is_user_confirmed", true);
            localIntent4.putExtra("preferred_app_intent", localIntent3);
            localIntent4.putExtra("preferred_app_intent_filter", localIntentFilter);
            localIntent4.putExtra("preferred_app_label", "默认桌面设置");
            context.startActivity(localIntent4);
        }
    
        //获取当前默认桌面,如果不是本App则弹出设置默认桌面对话框
        public void getDefaultHome() {
            final Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            final ResolveInfo res = context.getPackageManager().resolveActivity(intent, 0);
            if (res.activityInfo == null) {
                //获取失败
            } else if (res.activityInfo.packageName.equals("android")) {
                // No default selected
                clearDefaultLauncher();
                SetDefaultLauncher();
            } else {
                if (!res.activityInfo.packageName.equals("net.xiaomy.dxsjb.client")){
                    clearDefaultLauncher();
                    SetDefaultLauncher();
                }
    
            }
        }
    }

    这里注意:清除默认桌面,需要一个空的Activity,这里贴上xml文件代码,再自行添加一个Activity类就好

     <activity android:name=".activitys.MockHome" android:enabled="false"
                >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.HOME" />
                </intent-filter>
            </activity>

     

    我这里在主Activity里调用:

     //设置默认桌面
            Desktop desktop=new Desktop(this);
            desktop.getDefaultHome();

    好了,到这里就算完成了,欢迎留言评论交流,转载请注明出处!

     

    自己新开发的免费内网穿透项目小蚂蚁内网穿透,支持HTTP、TCP全端口映射戳我进内网穿透官网www.xiaomy.net!

     

    展开全文
  • android安卓开发入门视频教程资料讲解安卓核心基础,包含视频+笔记,适合新手入门学习。 百度网盘:https://pan.baidu.com/s/1uciMAAa97nm5RSLILtdPdg&shfl=sharepset ...

    android安卓开发入门视频教程资料讲解安卓核心基础,包含视频+笔记,适合新手入门学习。

    百度网盘:https://pan.baidu.com/s/1uciMAAa97nm5RSLILtdPdg&shfl=sharepset

    展开全文
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 在上文中讲到,通过DataBinding进行绑定控件以及进行相关操作,但是,这遇到了一个瓶颈,就比如绑定的变量发生变化的时候,每次都要重新...
  • 下载地址:百度网盘
  • Android 安卓DataBinding(九)·运算符

    千次阅读 2019-10-05 16:49:47
    Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓...
  • 下载地址:百度网盘
  •   下载地址:百度网盘
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓...
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓...
  • 只需要在 AndroidManifest.xml (清单)文件中 application 标签中添加以下属性即可! android:requestLegacyExternalStorage="true
  • 安卓开发兼容包:android-support-v8-renderscript.jar

    千次下载 热门讨论 2015-04-06 08:19:52
    用于低版本(API Level8及以上)的安卓系统的图像处理的库文件,例如模糊、矩阵运算等的图像处理
  • AndroidStudio androidTest安卓测试 test单元测试(Junit)

    万次阅读 热门讨论 2018-12-14 16:54:46
    androidTest是整合测试,可以运行在设备或虚拟设备上,需要编译...Android Studio 测试分 androidTest 安卓测试(下图绿箭头)和 test (java测试/junit测试)(下图红箭头),我们下面的实例是test(单元测试) =...
  • Android串口通信(Android Studio)

    千次下载 热门讨论 2017-12-21 15:20:53
    Android串口通信(Android Studio) serial Port 简单的demo 好久之前整的
  • 30款APP源码打包 Java Android安卓App源码 30款打包下载 Android安卓应用市场app商店源码 Android查询工具源代码 Android带进度条简易浏览器项目源码 Android仿QQ音乐播放器APP源码 Android仿爱乐透彩票项目源码 ...
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓...
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓...
  • 可能你手机安卓系统低于安装包最低支持的安卓系统版本
  • 安卓升级AndroidX手把手教程

    千次阅读 2019-05-07 19:29:54
    突然发现好多安卓项目已经改为了AndroidX,那么自己的项目也该升级一下了。下面是AndroidX的官方文档的概述。 AndroidX概述 AndroidX是Android团队用于在Jetpack中开发,测试,打包,版本和发布库的开源项目 ...
  • Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable 上一期讲到 BaseObservable 单向绑定,在中间又要写注解,又要加注解,然后还...
  • Android VNC Server

    2018-04-13 15:24:47
    Android VNC Server用于Android的Server端,PC可以通过VNC View来控制android设备,下载了个Android VNC Server,目前里面的编译bug,已经解决。备份用
  • <uses-permission android:name="android.permission.SEND_SMS"/>代码实现: 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为...
  • 目前安卓短信拦截主要有两种方式, 一种是监听短信接收通知广播,需要设置 android:name="android.permission.RECEIVE_SMS" /> android:name="android.permission.BROADCAST_SMS" /> 权限,并注册接收器   ...
  • 新建一个Android项目,选择一个虚拟机运行Android项目 结果连虚拟机都启动不起来,启动时报如下错误: 2018/9/27 10:23 Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration! ...
  • 安卓Android OTG USB串口通信

    热门讨论 2013-12-01 14:30:43
    安卓 Android OTG USB 串口通信,支持Cp2102、FT232R, CDC/ACM,使用Android USB Host API ,Android 3.1+,无需root
  • Android应用自动更新代码实现

    千次下载 热门讨论 2012-04-27 21:37:34
    Android应用自动更新代码实现,完美实现代码的自动更新。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,300,041
精华内容 1,320,016
关键字:

android安卓