原帖地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=24437
DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务.
1:使用
首先要在AndroidManifest.xml中申请访问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自定义主题
1.思路是通过自己构建KeyEvent对象来改变键的功能。
例如,把所有的按键都改成“返回键”的功能,代码如下:
按键按下事件:通过重写onKeyDown方法
按键重复点击:通过重写onKeyMultiple方法
按键弹起事件:通过重写onKeyUp方法
触笔点击事件:通过实现onTouchEvent方法
-------------------------------------------------------------------------------------------------------------------------
获取android IP
Android的电源管理部分,在纵向上分为四层:
第一部分:Application层
主要是利用Android Frameworks提供的API进行应用级的开发,需要注意的是相关权限的申明:
< uses-permission android:name="android.permission.WAKE_LOCK" />
第二部分:Frameworks层
1. / frameworks/base/core/java/android/os/PowerManager.java
v PowerManager:提供对设备的电源进行管理
? 常见锁类型
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
|
v WakeLock:电源管理对象锁
v Usage:
? 获取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. 注意在网络连接或传输时最好加锁,以免传输被中断
9. 注意加锁以保证程序逻辑
http://173.234.53.177/?paged=4
---------------------------------------------------
通过程序获取android系统手机的铃声和音量。同样,设置铃声和音量的方法也很简单!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;
}
}