android+桌面组件开发,android——桌面组件的开发
android除了普通的app應用外,還提供了桌面組件,那么怎么開發一個桌面組件呢?來看一下吧。
我們做這樣一個功能,通過桌面組件獲取imel,然后調用webserver,通過imel獲得用戶的相應信息,比如姓名,并顯示在桌面。
一、新建工程
新建的工程為普通android工程
圖標和activity不要選,因為我們不需要他們
其它的沒什么要注意的了。
二、xml配置
桌面組件需要的xml如下所示:
main.xml和AndroidManifest.xml就不多說了,一個是布局,一個是主要的配置。這兩個在普通app應用中也是有的。這里說一下widget_provider.xml
說明一下,這里的minWidth和minHeight指定桌面應用的大小。initialLayout指定布局xml。
三、實現代碼
桌面組件的實現只需要繼承AppWidgetProvider類即可。
可以覆寫的方法有
publicvoidonReceive(Context?context,?Intent?intent) 用來接收廣播消息
publicvoidonUpdate(Context?context,?AppWidgetManager?appWidgetManager,int[]?appWidgetIds) 每次更新都會調用,從桌面拖出桌面組件也會調用
publicvoidonDeleted(Context?context,int[]?appWidgetIds)刪除的時候調用
publicvoidonEnabled(Context?context) 從桌面拖出時會調用,多次拖出只調用一次
publicvoidonDisabled(Context?context) 最后一個組件刪除時調用該方法
我們這里只是覆寫onUpdate
有一點要注意:和普通app應用的service一樣,http請求發送不能寫在主線程里,需要啟動一個新的線程進行處理。
下面來看一下實現的例子
package com.wlf.selfAware;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.wlf.selfAware.cache.CacheLoader;
import com.wlf.selfAware.cache.NameCacheFactory;
import com.wlf.selfAware.cache.NameCacheLoader;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.telephony.TelephonyManager;
import android.widget.RemoteViews;
public class Widget extends AppWidgetProvider {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imel=tm.getDeviceId();
System.out.println("--------------------imel:"+imel+"-----------------------");
Aware aware=new Aware(context,appWidgetManager);
Thread thread=new Thread(aware);
thread.start();
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
private class Aware implements Runnable{
Context context;
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
String name;
public Aware(Context context,AppWidgetManager appWidgetManager){
this.context=context;
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(),R.layout.main);
thisWidget = new ComponentName(context,Widget.class);
}
public void run() {
String name="";
CacheLoadernameCacheLoader=new NameCacheLoader(new NameCacheFactory());
HttpClient httpclient = new DefaultHttpClient();
String uri="http://www.網址不告訴你:80/Service/rest/vip/pad/name/"+imel;
HttpGet request = new HttpGet(uri);
request.addHeader("Accept", "text/xml");
try{
HttpResponse response = httpclient.execute(request);
String rs=parseResponse(response);
System.out.println("--------------返回值:"+rs+"------------------");
JSONObject json=(JSONObject) JSON.parse(rs);
name=(String) json.get("obj");
System.out.println("--------------返回值:"+json.get("obj")+"------------------");
//將姓名存起來
System.out.println("--------------將獲得的名字緩存起來------------------");
nameCacheLoader.writeResource(this.context, "name", name);
System.out.println("--------------name:"+name+"------------------");
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getStackTrace());
}
if(name!=null && !name.equals("")){
remoteViews.setTextViewText(R.id.myName, name);
}
else{
String oldName="";
try {
System.out.println("--------------取得上次成功獲取的名字------------------");
oldName = nameCacheLoader.readResource(context, "name");
System.out.println("--------------oldName:"+oldName+"------------------");
} catch (Exception e) {
e.printStackTrace();
}
if(oldName!=null && !oldName.equals(""))
remoteViews.setTextViewText(R.id.myName, oldName);
else
remoteViews.setTextViewText(R.id.myName, "無用戶或未聯網");
}
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
public String parseResponse(HttpResponse response) throws Exception {
HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent();
StringBuilder sb = new StringBuilder();
BufferedReader r = new BufferedReader(new InputStreamReader(instream));
for (String line = r.readLine(); line != null; line = r.readLine()) {
sb.append(line);
}
String jsonString = sb.toString();
instream.close();
return jsonString;
}
}
總結
以上是生活随笔為你收集整理的android+桌面组件开发,android——桌面组件的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以心换心,将心比心----项目经理要学会
- 下一篇: 首都师范 博弈论 5 2 1帕累托最优