重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
..
创新互联专注于企业网络营销推广、网站重做改版、富县网站定制设计、自适应品牌网站建设、H5响应式网站、商城网站制作、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为富县等各大城市提供网站开发制作服务。
通用资源标志符(Universal Resource Identifier, 简称"URI")。
Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。
① 资源的命名机制;
② 存放资源的主机名;
③ 资源自身的名称。
Android的Uri由以下三部分组成: "content://"、数据的路径、标示ID(可选)*
例如:
所有联系人的Uri:
某个联系人的Uri:
所有图片Uri:
某个图片的Uri:
Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。
uri主要使用和ContentProvider有关。ContentProvider是Android四大组件之一,其本质上是一个标准化的数据管道,它屏蔽了底层的数据管理和服务等细节,以标准化的方式在Android 应用间共享数据。用户可以灵活实现ContentProvider所封装的数据存储以及增删改查等,所有的ContentProvider 必须实现一个对外统一的接口(URI)。
本文出自zhh_happig的博客,谢谢
Android support v4这个包是为Android 1.6(API版本为4)及以上的版本设计的(从android-support-v4-24.2.0开始,V4包支持的最低版本是Android 2.3即API Level 9),该支持库可以让在旧版本 Android 平台上运行的应用,支持新版本平台推出的功能。
举个Fragment的例子说明一下,假设我们某个应用支持的最低版本是:minSdkVersion=8,但是应用中用到了android.app.Fragment类,而Fragment类是在Android 11的时候才开始加入的,那么当我们的应用运行在Android 11以下的手机就会出现问题,那么如何能让Fragment在低于11的手机上也能正常使用呢?我们需要引入android.support.v4包中android.support.v4.app.Fragment来替换掉原来用到的android.app.Fragment类,android.support.v4.app.Fragment和android.app.Fragment有一样的效果,但是它能在低于11的手机上正常使用,这就是support支持库提供的功能,能兼容低版本的Android平台。
android.support.v4包支持的最低版本是Android 4,v4的意思是就是支持最低版本是4,如果你要使用Fragment,最低版本只兼容到4了。
拿上面的例子来说:应用中的minSdkVersion=8,为了兼容低版本的手机,引入了android.support.v4包中android.support.v4.app.Fragment。当应用在不同版本手机运行,android.support.v4是怎样工作的呢?
a.当运行在Android版本是4-10手机上,手机Android框架没有提供Fragmeng提供的功能:则android.support.v4支持库会调用自身android.support.v4.app.Fragment;
b.当运行在Android版本是11及以上的手机上,手机Android框架提供了Fragmeng提供的功能:则android.support.v4支持库会调用手机Android框架android.app.Fragment。
也就是说,如果应用调用其中一个支持类的方法,则支持库的行为将取决于运行应用的手机的Android 版本。如果手机Android框架提供必要的功能,则支持库将通过调用手机Android框架执行任务。如果应用在旧版本的 Android 上运行,且手机Android框架未提供所需的功能,则支持库自身可能会尝试提供相应的功能或什么都不做。无论是哪一种情形,应用通常都不需要检查其在哪一版本的 Android 上运行,而是通过支持库执行检查并选择适当的行为。
还有一些android.support.v4中类,比如ViewPager等,不管在Android那个版本,都没有这个类,所以要用到ViewPager,就必须引用android.support.v4包了。
注:随着系统的迭代Android 1.6的设备已经很少了,官方在Support Library 24.2.0版本的时候移除了对Android 2.2(API Level 8)及以下版本的支持,所以从Android Support v4 24.2.0开始,V4包支持的最低版本是Android 2.3即API Level 9
我们可以发现android-support-v4后面都跟着版本号:比如android-support-v4-23.0.0 (对应Android Api Level 23),如果不清楚这个版本号,在开发中也会带来很多问题。
最常见的问题就是已经引入了android-support-v4包,但是某个类或者某个方法却找不到,这个原因应该就是版本号不对了。
比如我们在targetSdkVersion 23的时,用到android.support.v4.content.PermissionChecker这个类来检查权限 ,但是引入了android-support-v4-22.2.1.jar后,却找不到PermissionChecker类,原因就是PermissionChecker是23.0.0版本才加入的,所以引入android-support-v4-23.0.0.jar就行了。
遇到这种问题,可以去 Android官方中文网站 找到对应的类或方法,看看它们加入的版本:added in version,然后在引入对应的support包
注:在android-support-v4-24.2.0及之后的版本中,为了增强效率和减小APK的大小起见,Android将android-support-v4包从一个独立的依赖包拆分成v4 compat library、v4 core-utils library、v4 core-ui library、v4 media-compat library和v4 fragment library这5个包,考虑到V4的向后兼容,你在工程中依赖V4这个依赖包时默认是包含拆分后的5个包的,但为了节省APK大小,建议在开发过程中根据实际情况依赖对应的V4包,移除不必要的V4包。
v4 compat library
兼容一些 Framework API,如 Context.getDrawable() 和 View.performAccessibilityAction()等,在AS中的依赖方式如下:
compile 'com.android.support:support-compat:24.2.1'
v4 core-utils library
提供一系列核心的工具类,如 AsyncTaskLoader 和 PermissionChecker,在AS中的依赖方式如下,按自己需求选择合适版本:
compile 'com.android.support:support-core-utils:24.2.1'
core-ui library
提供一系列核心的 UI,如 ViewPager、 NestedScrollView,在AS中的依赖方式如下:
compile 'com.android.support:support-core-ui:24.2.1'
v4 media-compat library
android.media 兼容库,包括 MediaBrowser 和 MediaSession,在AS中的依赖方式如下:
compile 'com.android.support:support-media-compat:24.2.1'
v4 fragment library
跟fragment相关部分,v4 fragment library这个子库依赖了其他4个子库,所以我们一旦依赖这个库就会自动导入其他4个子库,这跟直接依赖整个support-v4效果类似,在AS中的依赖方式如下:
compile 'com.android.support:support-fragment:24.2.1'
拆包并不一定代表能够真的解决效率和减小APK的大小问题,V4包拆分后的5个子包有依赖关系。即拆包之后,要用到某个子包的API时,可能还得依赖其它的子包,这也是有坑的地方。当我们编译没有问题,运行出现Do not find class之类的错误时,一定要看看是不是子包之间的依赖关系造成的,如果是引入相应的子包。出现这个依赖问题,再加上版本可能出现问题,对于新手来说,比较棘手,建议新手全部导入。
以上文章内容,是本人工作中的总结,供大家参考,有误的地方还请指正。
可能会带来不必要的开销,但这样做是真的方便。这里把背景渐变、背景点击变色,字体点击变色都给弄好了,其他属性可以在获取到控件后再添加。
当我们们使用Android Stuido时候,经常需要打印Log,而Android Studio自带的Log使用又较为繁琐且无法打印超长Log,所以自己封装一个Log工具类,大家直接CV即可.
使用方式同样也很简单直接在使用地方调用即可
工具类:一般存放的是公共的静态方法,可供所有需要的类直接调用。
如获取SD卡路径,通过文件路径获取文件之类的重复通用性较高的方法就可以放在工具类中。
由于是静态方法,就不用实例化,也方便了调用的操作。
总结的Android开发中常用的工具类,大部分同样适用于Java。
目前包括 HttpUtils、DownloadManagerPro、Safe.ijiami、ShellUtils、PackageUtils、PreferencesUtils、JSONUtils、FileUtils、ResourceUtils、StringUtils、ParcelUtils、RandomUtils、ArrayUtils、ImageUtils、ListUtils、MapUtils、ObjectUtils、SerializeUtils、SystemUtils、TimeUtils。
import java.util.Stack;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
/**
*
* @ClassName: com.qust.myutils.AppManager
* @Description: Activity管理类:用于管理Activity和退出程序
* @author zhaokaiqiang
* @date 2014-11-20 下午4:53:33
*
*/
public class AppManager {
// Activity栈
private static StackActivity activityStack;
// 单例模式
private static AppManager instance;
private AppManager() {
}
/**
* 单一实例
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new StackActivity();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class? cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
for (int i = 0; i activityStack.size(); i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
}
}
}