`
coolerbaosi
  • 浏览: 722055 次
文章分类
社区版块
存档分类
最新评论

android相关知识简介

 
阅读更多

DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务.
1:使用
首先要在AndroidManifest.xml中申请访问DownloadManager的权限

添加一个下载任务:
ContentValues values = new ContentValues();
values.put(Downloads.URI, url);//指定下载地址
values.put(Downloads.COOKIE_DATA, cookie);//如果下载Server需要cookie,设置cookie
values.put(Downloads.VISIBILITY,Downloads.VISIBILITY_HIDDEN);//设置下载提示是否在屏幕顶部显示
values.put(Downloads.NOTIFICATION_PACKAGE, getPackageName());//设置下载完成之后回调的包名
values.put(Downloads.NOTIFICATION_CLASS, DownloadCompleteReceiver.class.getName());//设置下载完成之后负责接收的Receiver,这个类要继承BroadcastReceiver
values.put(Downloads.DESTINATION,save_path);//设置下载到的路径,这个需要在Receiver里自行处理
values.put(Downloads.TITLE,title);//设置下载任务的名称
this.getContentResolver().insert(Downloads.CONTENT_URI, values);//将其插入到DownloadManager的数据库中,数据库会触发修改事件,启动下载任务

2:如何为DownloadManager设置代理,比如Wap
values.put(Downloads.PROXY_HOST,”10.0.0.172″);
values.put(Downloads.PROXY_PORT,”80″);

3:如何在下载过程中监听下载任务
可以通过监听数据库来实现
DownloadsChangeObserver mDownloadObserver=new DownloadsChangeObserver(Downloads.CONTENT_URI);
private class DownloadsChangeObserver extends ContentObserver {
public DownloadsChangeObserver(Uri uri) {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
//查询需要监听的字段
//比如要监听实时下载进度,查看当前下载状态:是否已经断开,或者下载失败等等
StringBuilder wherequery = new StringBuilder(Downloads.TITLE);
wherequery.append(“=”);
wherequery.append(“‘”);
wherequery.append(mTitle);
wherequery.append(“‘”);

mDownloadCursor =mContext.getContentResolver().query(Downloads.CONTENT_URI, new String[] {Downloads.TITLE, Downloads.STATUS, Downloads.CURRENT_BYTES,}, wherequery.toString(), null,orderBy);
int mSizeColunmId=mDownloadCursor.getColumnIndexOrThrow(Downloads.CURRENT_BYTES);
mDownloadCursor.moveToFirst();
int size=mDownloadCursor.getInt(mSizeColunmId);


4:如何删除下载记录
private void deleteHistory(String title)//删除掉指定名称的下载记录
{
StringBuilder whereDelete = new StringBuilder(Downloads.TITLE);
whereDelete.append(“=”);
whereDelete.append(“‘”);
whereDelete.append(str);
whereDelete.append(“‘”);
this.getContentResolver().delete(Downloads.CONTENT_URI,whereDelete.toString(), null);
}

在Android中,申请WakeLock可以让你的进程持续执行即使手机进入睡眠模式,比较实用的是比如后台有网络功能,可以保证操作持续进行.
方法: 在操作之前加入
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);

wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Constants.TAG);
wakeLock.acquire();

别忘了在操作完毕之后释放掉
if (wakeLock != null) {

wakeLock.release();
wakeLock = null;
}

最近在做项目的时候,遇到这样的问题,我需要能够把整个application都杀死,找了半天都没有找到,后来问同事才知道答案。代码如下:
view plaincopy to clipboardprint?

ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
mActivityManager .restartPackage(context.getPackageName());

在此做个记录,以备忘记!

Android 获取系统中所有安装的APK的信

private
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}
public class AppsAdapter extends BaseAdapter {
public AppsAdapter() {
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Grid1.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}

public final int getCount() {
return mApps.size();
}
public final Object getItem(int position) {
return mApps.get(position);
}
public final long getItemId(int position) {
return position;
}
ListmApps;

安装完Android SDK后,默认会在C盘创建一个.Android的文件夹用来存放AVD.此时如果想修改AVD的路径,可以设置一个环境变量ANDROID_SDK_HOME=要设置的路径(比如:F:\Java\Android),重新启动Eclipse,修改成功!

android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:
1、Drawable → Bitmap
Java代码

public static Bitmap drawableToBitmap(Drawable drawable) {

Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
2、从资源中获取Bitmap
Java代码

Resources res=getResources();

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3、Bitmap → byte[]
Java代码

private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}

4、 byte[] → Bitmap

Java代码

private Bitmap Bytes2Bimap(byte[] b){
if(b.length!=0){
return BitmapFactory.decodeByteArray(b, 0, b.length);
}
else {
return null;
}
}

通过分析Launcher的生成快捷方式的过程,找出了使用Intent发送请求,Launcher通过自己注册的InstallShortCutReceiver和UnInstallShortCutReceiver实现了快捷方式图标的生成与移除过程。本文主要分析外部apk如何使用Intent请求生成快捷方式和移除快捷方式图标的问题。

生成快捷方式代码:

Java代码

private static final String ACTION_INSTALL_SHORTCUT =
“com.android.launcher.action.INSTALL_SHORTCUT”;

/**
* 是否可以有多个快捷方式的副本
*/
static final String EXTRA_SHORTCUT_DUPLICATE = “duplicate”;

Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
getString(R.string.app_name));
shortcutIntent.putExtra(EXTRA_SHORTCUT_DUPLICATE, false);
Intent intent2 = new Intent(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_LAUNCHER);

intent2.setComponent(new ComponentName(this.getPackageName(),
“.Main”));

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(this,
R.drawable.icon));
sendBroadcast(shortcutIntent);

注:Intent intent2 = new Intent(Intent.ACTION_MAIN); 这个也可以换成的构造参数也可以是Intent.ACTION_CREATE_SHORTCUT,也可以生成快捷方式图标,但是这样不标准,在删除的时候如果不和这个对于相同则无法删除。所以还是用Intent.ACTION_MAIN。

那么删除快捷方式的代码是:
Java代码

private static final String ACTION_UNINSTALL_SHORTCUT =
“com.android.launcher.action.UNINSTALL_SHORTCUT”;

Intent intent = new Intent(ACTION_UNINSTALL_SHORTCUT );
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);
ComponentName comp = new ComponentName(info.activityInfo.packageName,
info.activityInfo.name);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent()
.setComponent(comp).setAction(“android.intent.action.MAIN”));
sendBroadcast(intent);

常用的Android自定义主题

android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式
android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
android:theme="Theme.Light" 背景为白色
android:theme="Theme.Light.NoTitleBar" 白色背景并无标题栏
android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
android:theme="Theme.Black" 背景黑色
android:theme="Theme.Black.NoTitleBar" 黑色背景并无标题栏
android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
android:theme="Theme.Wallpaper" 用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
android:theme="Translucent"
android:theme="Theme.Translucent.NoTitleBar"
android:theme="Theme.Translucent.NoTitleBar.Fullscreen"
android:theme="Theme.Panel"
android:theme="Theme.Light.Panel"


使用Intent调用系统的Camera程序的裁剪功能实现图片修剪。

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");

不过可能会出现无法找到Activity的android.content.ActivityNotFoundException异常,这是由于Android内部的gallery和camera都有处理,可以尝试另一种URI,com.android.gallery的com.android.camera.CropImage,在setClassName时,具体的代码为

final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(mFile));
intent.putExtra("outputX", width);
intent.putExtra("outputY", height);
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:/" + mFile.getAbsolutePath()));
startActivityForResult(intent, REQUEST_CROP_IMAGE);


1.思路是通过自己构建KeyEvent对象来改变键的功能。

例如,把所有的按键都改成“返回键”的功能,代码如下:

//这里构建KeyEvent对象,其功能为返回键的功能
//因此我们按任意键都会执行返回键功能
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);

//这里传入的参数就是我们自己构建的KeyEvent对象key
super.onKeyDown(key.getKeyCode(), key);

至此OK

控件事件是通过(setOnClickListener)设置其控件的监听器来监听并重写某些函数来处理。

按键按下事件:通过重写onKeyDown方法

按键重复点击:通过重写onKeyMultiple方法
按键弹起事件:通过重写onKeyUp方法
触笔点击事件:通过实现onTouchEvent方法

-------------------------------------------------------------------------------------------------------------------------

获取android IP

参考前人研究成果,非个人创作

1.使用WIFI

首先设置用户权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

其次,代码如下

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//获取wifi服务
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
//判断wifi是否开启
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = intToIp(ipAddress);
EditText et = (EditText)findViewById(R.id.EditText01);
et.setText(ip);
}
private String intToIp(int i) {

return (i & 0xFF ) + "." +
((i >> 8 ) & 0xFF) + "." +
((i >> 16 ) & 0xFF) + "." +
( i >> 24 & 0xFF) ;
}

2.使用GPRS

首先,设置用户上网权限

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

其次,代码如下

public String getLocalIpAddress()
{
try
{
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
{
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
{
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress())
{
return inetAddress.getHostAddress().toString();
}
}
}
}
catch (SocketException ex)
{
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}

----------------------------------------------------------------------------------

不知道其他应用的action main情况下启动他

Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。
一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);

但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。

下面是实现代码:
private void openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 0);

Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);

List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);

ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

ComponentName cn = new ComponentName(packageName, className);

intent.setComponent(cn);
startActivity(intent);
}
}


android布局属性详解
  各种Layout用到的一些重要的属性

  第一类:属性值为true或false

  android:layout_centerHrizontal 水平居中

  android:layout_centerVertical 垂直居中

  android:layout_centerInparent 相对于父元素完全居中

  android:layout_alignParentBottom 贴紧父元素的下边缘

  android:layout_alignParentLeft 贴紧父元素的左边缘

  android:layout_alignParentRight 贴紧父元素的右边缘

  android:layout_alignParentTop 贴紧父元素的上边缘

  android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

  第二类:属性值必须为id的引用名“@id/id-name”

  android:layout_below 在某元素的下方

  android:layout_above 在某元素的的上方

  android:layout_toLeftOf 在某元素的左边

  android:layout_toRightOf 在某元素的右边

  android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐

  android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐

  android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐

  android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

  第三类:属性值为具体的像素值,如30dip,40px

  android:layout_marginBottom 离某元素底边缘的距离

  android:layout_marginLeft 离某元素左边缘的距离

  android:layout_marginRight 离某元素右边缘的距离

  android:layout_marginTop 离某元素上边缘的距离

  EditText的android:hint

  设置EditText为空时输入框内的提示信息。

  android:gravity

  android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右

  android:layout_gravity

  android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity=”right”则button靠右

  android:layout_alignParentRight

  使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。

  android:scaleType:

  android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别:

  CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

  CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

  CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽

  FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示

  FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置

  FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置

  FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示

  MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。

Android的电源管理部分,在纵向上分为四层:

第一部分:Application

主要是利用Android Frameworks提供的API进行应用级的开发,需要注意的是相关权限的申明:

<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>

<uses-permissionandroid:name="android.permission.DEVICE_POWER"/>

第二部分:Frameworks

1./frameworks/base/core/java/android/os/PowerManager.java

vPowerManager:提供对设备的电源进行管理

?常见锁类型

Flag Value

CPU

Screen

Keyboard

PARTIAL_WAKE_LOCK

On

Off

Off

SCREEN_DIM_WAKE_LOCK

On

Dim

Off

SCREEN_BRIGHT_WAKE_LOCK

On

Bright

Off

FULL_WAKE_LOCK

On

Bright

Bright

?附加锁类型:仅仅是对Screen有影响

Flag Value

Description

ACQUIRE_CAUSES_WAKEUP

This flag will force the screen and/or keyboard to turn on immediately.

ON_AFTER_RELEASE

If this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer

vWakeLock:电源管理对象锁

vUsage:

?获取PowerManager实例PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);

?获取PowerManager.WakeLock实例mWakeLock=pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "TEST");

?Device On

mWakeLock.acquire();

?Device Off

mWakeLock.release();

2./frameworks/base/core/java/android/os/Power.java

提供一些电源管理的函数,如reboot()。其是JNI的上层接口,其往下调用android_os_power.cpp

3./frameworks/base/services/java/com/android/server/PowerManagerService.java

电源管理服务,AIDL接口IPowerManager的实现者。

第三部分:JNI

/frameworks/base/core/jni/android_os_power.cpp

第四部分:Native

/hardware/libhardware/power/power.c

Linux kernel交互

第五部分:Linux驱动层

/drivers/android/power.c

第六部分:使用电源管理注意事项

1.可在onCreate时设置该界面的电源管理,在onDestroy时取消设置

2.可在onResume时设置该界面的电源管理,在onPause时取消设置

3.注意设置是以Activity为单位,不是以应用为单位

4.注意在AndroidManifest.xml中声明该应用有设置电源管理的权限

5.注意加锁解锁要成对出现

6.注意多个用途最好用多个锁,不要一锁多用,以免出错

7.注意对运行在后台和异常时对锁的处理

8.注意在网络连接或传输时最好加锁,以免传输被中断

http://www.rosoo.net/a/201012/10599.html

9.注意加锁以保证程序逻辑

http://173.234.53.177/?paged=4

---------------------------------------------------

通过程序获取android系统手机的铃声和音量。同样,设置铃声和音量的方法也很简单!
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//通话音量
int max = am.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = am.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d(”VIOCE_CALL”, “max : ” + max + ” current : ” + current);
//系统音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d(”SYSTEM”, “max : ” + max + ” current : ” + current);
//铃声音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d(”RING”, “max : ” + max + ” current : ” + current);
//音乐音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(”MUSIC”, “max : ” + max + ” current : ” + current);
//提示声音音量
max = am.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = sm.getStreamVolume( AudioManager.STREAM_ALARM );
Log.d(”ALARM”, “max : ” + max + ” current : ” + current);
设置音量的方法也很简单,AudioManager提供了方法:
public void setStreamVolume(int streamType, int index, int flags)
其中 streamType 有内置的常量,可以在AudioManager里面查到相关的定义。 通过程序获取android系统手机的铃声和音量。同样,设置铃声和音量的方法也很简单!
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
android中定义的dimension单位有以下这些:
px(Pixels ,像素):对应屏幕上的实际像素点。
in(Inches ,英寸):屏幕物理长度单位。
mm(Millimeters ,毫米):屏幕物理长度单位。
pt(Points ,磅):屏幕物理长度单位,1/72英寸。
dp(与密度无关的像素):逻辑长度单位,在 160 dpi 屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。
dip:与dp相同,多用于Google示例中。
sp(与密度和字体缩放度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。


android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:
1、Drawable → Bitmap
Java代码

public static Bitmap drawableToBitmap(Drawable drawable) {

Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
2、从资源中获取Bitmap
Java代码

Resources res=getResources();

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3、Bitmap → byte[]
Java代码

private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}

4、 byte[] → Bitmap

Java代码

private Bitmap Bytes2Bimap(byte[] b){
if(b.length!=0){
return BitmapFactory.decodeByteArray(b, 0, b.length);
}
else {
return null;
}
}

android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式
android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
android:theme="@android:style/Theme.Light" 背景为白色
android:theme="@android:style/Theme.Light.NoTitleBar" 白色背景并无标题栏
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
android:theme="@android:style/Theme.Black" 背景黑色
android:theme="@android:style/Theme.Black.NoTitleBar" 黑色背景并无标题栏
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"黑色背景,无标题栏,全屏
android:theme="@android:style/Theme.Wallpaper" 用系统桌面为应用程序背景
android:theme="@android:style/Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
android:theme="@android:style/Translucent" 半透明效果
android:theme="@android:style/Theme.Translucent.NoTitleBar" 半透明并无标题栏
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 半透明效果,无标题栏,全屏
android:theme="@android:style/Theme.Panel"
android:theme="@android:style/Theme.Light.Panel"

分享到:
评论

相关推荐

    Android黑名单管理系统毕业论文

    第二章 Android相关知识 5 2.1 Android简介 5 2.2 Android的系统架构 5 2.3 Android应用程序四大组件 7 2.4 Intent类 9 2.5 Java语言和事件处理模型 9 2.6 异常处理 10 2.7 SQLite数据库 11 2.7.1 SQLite的功能 11 ...

    Android核心技术与实例详解 PDF扫描版

    全书分为三篇共18章 第一篇以简单易懂的实例为依托 详细介绍了Android平台的基本控件 高级控件 常用界面布局及菜单对话框等相关知识;第二篇介绍了Android平台的高级知识 包括消息与广播服务 网络数据处理 手机通信...

    一、Android简介-Android开发与实践

    认识Android及3G软件开发基础知识 熟悉Android SDK的基本结构,工具的基本用法 掌握Android程序的基础结构 掌握Android 基本组件的使用方法 掌握Android 基本的数据存储操作 ...了解Android上的网络通信及测试相关知识

    Android高级编程--源代码

    通过学习,您可以打下牢固的理论根基,了解使用当前android 1.0 sdk编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。  主要内容  ◆android移动开发的最佳实践  ◆简要介绍...

    《Google Android 揭秘》(美) W.Frank Ableson 著

    这是一本全面介绍Android相关知识的图书,全书分为三个部分,由浅入深,从Android初级知识,讲到一些关于核心编程的实用示例,最后还讨论了一些高级应用程序的话题。在介绍Android编程的时候,各主题都使用了独立的...

    《Android群英传》完整扫描版

    本书从由总到分,让读者从整体上把握Android体系结构,融入“群英传”这一故事情节,针对各个知识点进行分类阐述,并结合一线实际开发经验和Android 5.0版本新特性来,紧跟市场需求进行讲解。然后通过实战应用案例,...

    Android开发与实践 pdf

    作 者: 李文琴,李翠霞 编 出版时间: 2014 ...本书可作为应用型本科计算机专业、软件学院、高职软件专业及相关专业的教材,同时也可作为Android爱好者以及初、中级Android应用开发人员的参考工具书。

    疯狂Android讲义源码

     1.1.1 Android的发展和简介 2  1.1.2 Android平台架构及特性 3  1.2 搭建Android开发环境 5  1.2.1 下载和安装Android SDK 5  1.2.2 安装Eclipse和ADT插件 7  1.3 Android常用开发工具的用法 10  1.3.1 创建...

    基于OpenGL的Android+3D游戏开发技术详解与典型案例(源码)

    作为一名Android的初学者,通过本书的学习可以快速全面地掌握Android 3D游戏开发的相关知识,稳健地步入Android 3D游戏开发人员的行列。  有一定Android基础且希望学习Android 3D游戏开发的读者  有一定Android...

    Android 4高级编程(第3版)源代码

     的相关知识  ◆ 解释了如何创建后台服务、通知和Cloud to Device Messaging  ◆ 演示了如何创建动态的、交互式的主屏幕微件和Live  Wallpaper  ◆ 探索了硬件和通信API,包括蓝牙、电话、Wi-Fi Direct、  NFC...

    android系统原理及开发要点详解

     第5章“Android的Java虚拟机和Java环境”,这是介于本地和Java层之间的相关内容,主要介绍Android的Java虚拟机Dalvik的基本概念、Android Java程序的环境、JNI的使用方法,以及Java框架的启动流程等。  第6章...

    《Android 3D游戏开发技术详解与典型案例》各章节源码

     《Android3D游戏开发技术详解与典型案例》既介绍了Android 3D游戏开发中必知必会的基础知识,同时通过7个真实案例向读者介绍Android 3D游戏的...,希望通过本书能够使读者尽快掌握Android 3D游戏开发的相关知识...

    Android_3D游戏开发技术详解与典型案例-pdf.part1.rar

     《Android3D游戏开发技术详解与典型案例》既介绍了Android 3D游戏开发中必知必会的基础知识,同时通过7个真实案例向读者介绍Android 3D游戏的...,希望通过本书能够使读者尽快掌握Android 3D游戏开发的相关知识...

    Android_3D游戏开发技术详解与典型案例-pdf.part3.rar

    3D游戏开发的相关知识。 内容简介  《Android3D游戏开发技术详解与典型案例》主要以Android平台下3D游戏的开发为主题,并结合真实的 案例向读者详细介绍了OpenGL ES的基础知识及3D游戏程序开发的整个流程。  ...

    Android 程序设计(英文版)

    本书以开发设计良好的Android应用为主题,循序渐进介绍了Android开发的相关知识。本书内容翔实,从基础概念、工具环境的说明,Android系统框架的介绍,到骨架(skeleton)应用的探索以及一些相关高级主题的展开,...

    Android核心技术与实例详解第2版

    全书分为3篇共18章,第1篇以简单易懂的实例为依托,详细介绍了Android平台的基本控件、高级控件、常用界面布局及菜单对话框等相关知识;第2篇介绍了Andr 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Android程序设计基础

     本书内容完整丰富,具有较强的通用性,读者都能通过本书快速学习 android开发,提高相关技能。... 作译者 作者: Ed Burnette Ed Burnette 资深软件技术专家,拥有20多年软件开发经验。他是SAS高级计算机实验室...

    精通Android3中文版

    资源名称:精通Android 3中文版内容简介:《精通Android 3》在上一版的基础上进行了全面改进,增加了Android内部构件的相关知识,介绍了线程、进程、长期运行的服务、广播接收程序和闹钟管理器。本版还介绍了更多UI...

    3G应用开发之Android

    介绍Android的有关信息 3G相关知识 Android的简介 掌握Android IDE相关配置 动手编写第一个Android程序 熟悉Android程序的目录结构

Global site tag (gtag.js) - Google Analytics