Android Assert工具类
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ package com.example.android.justforus; import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import android.util.Log; import java.io.FileNotFoundException;
import java.io.IOException; import static java.net.URLConnection.guessContentTypeFromName; /**
* Generic content provider, which makes any files available in this app's "assets" directory
* available publicly.
*
* <p>To use, add the following to your AndroidManifest.xml:
*
* <code><pre>
* <provider
* android:name=".AssetProvider"
* android:authorities="[YOUR CONTENT PROVIDER DOMAIN HERE]"
* android:grantUriPermissions="true"
* android:exported="true"/>
* </pre></code>
*/
public class AssetProvider extends ContentProvider { /**
* Content provider authority that identifies data that is offered by this
* {@link AssetProvider}.
*/
public static String CONTENT_URI = "com.example.android.justforus"; private static final String TAG = "AssetProvider"; AssetManager mAssets; @Override
public boolean onCreate() {
Context ctx = getContext();
if (ctx == null) {
// Context not available. Give up.
return false;
}
mAssets = ctx.getAssets();
return true;
} @Override
public String getType(Uri uri){
// Returns the MIME type for the selected URI, in conformance with the ContentProvider
// interface. Looks up the file indicated by /res/assets/{uri.path}, and returns the MIME
// type for that file as guessed by the URLConnection class. // Setup
String path = uri.getLastPathSegment(); // Check if file exists
if (!fileExists(path)) {
return null;
} // Determine MIME-type based on filename
return guessContentTypeFromName(uri.toString());
} @Override
public AssetFileDescriptor openAssetFile (Uri uri, String mode)
throws FileNotFoundException, SecurityException {
// ContentProvider interface for opening a file descriptor by URI. This content provider
// maps all URIs to the contents of the APK's assets folder, so a file handle to
// /res/assets/{uri.path} will be returned. // Security check. This content provider only supports read-only access. (Also, the contents
// of an APKs assets folder are immutable, so read-write access doesn't make sense here.)
if (!"r".equals(mode)) {
throw new SecurityException("Only read-only access is supported, mode must be [r]");
} // Open asset from within APK and return file descriptor
String path = uri.getLastPathSegment();
try {
return mAssets.openFd(path);
} catch (IOException e) {
throw new FileNotFoundException();
}
} /**
* Check if file exists inside APK assets.
*
* @param path Fully qualified path to file.
* @return true if exists, false otherwise.
*/
private boolean fileExists(String path) {
try {
// Check to see if file can be opened. If so, file exists.
mAssets.openFd(path).close();
return true;
} catch (IOException e) {
// Unable to open file descriptor for specified path; file doesn't exist.
return false;
}
} @Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
String path = uri.getLastPathSegment();
if (!fileExists(path)) {
Log.e(TAG, "Requested file doesn't exist at " + path);
return null;
} // Create matrix cursor
if (projection == null) {
projection = new String[]{
OpenableColumns.DISPLAY_NAME,
OpenableColumns.SIZE,
};
} MatrixCursor matrixCursor = new MatrixCursor(projection, 1);
Object[] row = new Object[projection.length];
for (int col = 0; col < projection.length; col++) {
if (OpenableColumns.DISPLAY_NAME.equals(projection[col])) {
row[col] = path;
} else if (OpenableColumns.SIZE.equals(projection[col])) {
try {
AssetFileDescriptor afd = openAssetFile(uri, "r");
if (afd != null) {
row[col] = Long.valueOf(afd.getLength());
}
afd.close();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
}
matrixCursor.addRow(row);
return matrixCursor;
} // Required/unused ContentProvider methods below.
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
throw new RuntimeException("Operation not supported");
} @Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
throw new RuntimeException("Operation not supported");
} @Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
throw new RuntimeException("Operation not supported");
}
}
Android Assert工具类的更多相关文章
- 53. Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
- Android 常见工具类封装
1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0' ...
- 【转】Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefe ...
- Spring的Assert工具类的用法
简介 今天在看spring mvc源码时看到下面代码,感觉蛮有意思的,在这里记录下 Assert断言工具类,通常用于数据合法性检查,在JAVA编程中,通常会编写如下代码: if (name == nu ...
- Android基础工具类重构系列一Toast
前言: 一直在考虑写一下Android实际项目中的一些总结,翻看CSDN博客,上一篇已经是一年多曾经. 本系列定位Android基础工具类重构.旨在记录实际项目中经经常使用到的一些工具类,比方Toas ...
- (转载)android 一些工具类汇总
android 一些工具类汇总 作者:曾田生z 字体:[增加 减小] 类型:转载 时间:2016-08-14我要评论 本文给大家汇总介绍了一些常用的Android工具类,非常的简单实用,有需要的小伙伴 ...
- 随笔分类 - Android之工具类
Android之文件搜索工具类 /** * @detail 搜索sdcard文件 * @param 需要进行文件搜索的目录 * @param 过滤搜索文件类型 */ private void sear ...
- Android 系统工具类SystemUtils
包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...
- Android Sqlite 工具类封装
鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用. 该封装类主要支持一下功能 支持多用户数据储存 支持 Sqlite数据库升级 支持传入 Sql 语句建表 支持 SQLit ...
随机推荐
- (原)ubuntu上安装nvidia及torch的nccl
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5717234.html 参考网址: https://github.com/NVIDIA/nccl htt ...
- iOS UIWebView 访问https 绕过证书验证的方法
在文件开始实现 allowsAnyHTTPSCertificateForHost 方法 @implementation NSURLRequest (NSURLRequestWithIgnoreSSL ...
- [Head First Python]6. summary
1- 字典-内置数据结构,数据值与键值关联 键-字典中查找部分 值-字典中数据部分 使用dict()工厂函数或者只用{}可以创建一个空字典 >>> list = {} >> ...
- inPolygonTest学习和C++实现
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 此篇博客实现了判定平面一点是否在给定多边形内部的功能.精确,性能优良,因为只包含加法和乘法运算,效 ...
- STM32工程中出现 error: A1163E: Unknown opcode R0, , expecting opcode or Macro错误分析及处理
最近测试以前的一个程序,一般都是打开以前写的程序修改参数直接测试 但是发现以前的编译后出现错误. 奇怪了,以前的出现都是调试好了的啊,一般都是没有错误的,迅速找问题 跳转到错误代码行 代码区域 Hea ...
- jQuery之动画效果
1.show()显示效果 语法:show(speed,callback) Number/String,Function speend为动画执行时间,单位为毫秒.也可以为slow"," ...
- C# Struct结构体
C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中分配空间,栈中保存的只是引用 ...
- error: ‘shared_ptr’ in namespace ‘std’ does not name a type
用G++编译项目的时候发生标题上的错误,原因是,这是c++ 11标准的.在给g++传递命令行的时候加上-std=c++0x就行了. 还需要在源码中#include<memory> 我的cm ...
- CentOS7安全设置 yum-cron系统自动更新,firewalld防火墙简单使用
PermitRootLogin nosystemctl restart sshd.service; yum -y install firewalld; systemctl start firewall ...
- LD1-M(简单图的判定+构造,Havel定理)
题目链接 /* *题目大意: *给出一个图的每个点的度的序列,求能否构成一个简单图,如果能构出简单图,则输出图的邻接矩阵; * *算法思想: *Havel定理的应用; *给定一个非负整数序列{dn}, ...