原帖地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=24437

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;
}
List mApps;

安装完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-permission android:name="android.permission.WAKE_LOCK" />

< uses-permission android: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实例PowerManager pm=(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"


更多相关文章

  1. Android PendingIntent实现原理和代码
  2. android Setting中隐藏项实现原理与代码
  3. Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播
  4. Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命
  5. Android Studio 单刷《第一行代码》系列 01 —— 第一战 HelloWo

随机推荐

  1. 前端开发使用工具 gulp
  2. 机器学习开篇小菜
  3. MYCAT的初恋
  4. gradle|springboot+gradle多模块化应用
  5. MGR重启
  6. gradle|gradle配置阿里云镜像和插件镜像
  7. MYSQL微服务架构
  8. springboot|springboot配置Filter过滤器
  9. Django项目知识点(一)
  10. 机器学习之kNN算法