现在的位置: 首页 > 综合 > 正文

android相关知识简介

2014年01月04日 ⁄ 综合 ⁄ 共 9441字 ⁄ 字号 评论关闭

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() 

    { 

抱歉!评论已关闭.