DownloadManager是Android为开发者提供的一个后台应用组件,它通过Http层进行文件的下载任务. 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 3:如何在下载过程中监听下载任务 mDownloadCursor =mContext.getContentResolver().query(Downloads.CONTENT_URI, new String[] {Downloads.TITLE, Downloads.STATUS, Downloads.CURRENT_BYTES,}, wherequery.toString(), null,orderBy); 在Android中,申请WakeLock可以让你的进程持续执行即使手机进入睡眠模式,比较实用的是比如后台有网络功能,可以保证操作持续进行. wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Constants.TAG); 别忘了在操作完毕之后释放掉 wakeLock.release(); 最近在做项目的时候,遇到这样的问题,我需要能够把整个application都杀死,找了半天都没有找到,后来问同事才知道答案。代码如下: ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 在此做个记录,以备忘记! Android 获取系统中所有安装的APK的信 private public final int getCount() { 安装完Android SDK后,默认会在C盘创建一个.Android的文件夹用来存放AVD.此时如果想修改AVD的路径,可以设置一个环境变量ANDROID_SDK_HOME=要设置的路径(比如:F:\Java\Android),重新启动Eclipse,修改成功! android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下: public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap Resources res=getResources(); Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic); private byte[] Bitmap2Bytes(Bitmap bm){ 4、 byte[] → Bitmap Java代码 private Bitmap Bytes2Bimap(byte[] b){ 通过分析Launcher的生成快捷方式的过程,找出了使用Intent发送请求,Launcher通过自己注册的InstallShortCutReceiver和UnInstallShortCutReceiver实现了快捷方式图标的生成与移除过程。本文主要分析外部apk如何使用Intent请求生成快捷方式和移除快捷方式图标的问题。 生成快捷方式代码: Java代码 private static final String ACTION_INSTALL_SHORTCUT = /** Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT); intent2.setComponent(new ComponentName(this.getPackageName(), shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2); 注:Intent intent2 = new Intent(Intent.ACTION_MAIN); 这个也可以换成的构造参数也可以是Intent.ACTION_CREATE_SHORTCUT,也可以生成快捷方式图标,但是这样不标准,在删除的时候如果不和这个对于相同则无法删除。所以还是用Intent.ACTION_MAIN。 那么删除快捷方式的代码是: private static final String ACTION_UNINSTALL_SHORTCUT = Intent intent = new Intent(ACTION_UNINSTALL_SHORTCUT ); 常用的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方法 ------------------------------------------------------------------------------------------------------------------------- 获取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 v PowerManager:提供对设备的电源进行管理 ? 常见锁类型
? 附加锁类型:仅仅是对Screen有影响
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. 注意在网络连接或传输时最好加锁,以免传输被中断
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在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下: public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap Resources res=getResources(); Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic); private byte[] Bitmap2Bytes(Bitmap bm){ 4、 byte[] → Bitmap Java代码 private Bitmap Bytes2Bimap(byte[] b){ •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" |