android+桌面组件开发,android——桌面组件的开发
android除了普通的app應(yīng)用外,還提供了桌面組件,那么怎么開(kāi)發(fā)一個(gè)桌面組件呢?來(lái)看一下吧。
我們做這樣一個(gè)功能,通過(guò)桌面組件獲取imel,然后調(diào)用webserver,通過(guò)imel獲得用戶(hù)的相應(yīng)信息,比如姓名,并顯示在桌面。
一、新建工程
新建的工程為普通android工程
圖標(biāo)和activity不要選,因?yàn)槲覀儾恍枰麄?/p>
其它的沒(méi)什么要注意的了。
二、xml配置
桌面組件需要的xml如下所示:
main.xml和AndroidManifest.xml就不多說(shuō)了,一個(gè)是布局,一個(gè)是主要的配置。這兩個(gè)在普通app應(yīng)用中也是有的。這里說(shuō)一下widget_provider.xml
說(shuō)明一下,這里的minWidth和minHeight指定桌面應(yīng)用的大小。initialLayout指定布局xml。
三、實(shí)現(xiàn)代碼
桌面組件的實(shí)現(xiàn)只需要繼承AppWidgetProvider類(lèi)即可。
可以覆寫(xiě)的方法有
publicvoidonReceive(Context?context,?Intent?intent) 用來(lái)接收廣播消息
publicvoidonUpdate(Context?context,?AppWidgetManager?appWidgetManager,int[]?appWidgetIds) 每次更新都會(huì)調(diào)用,從桌面拖出桌面組件也會(huì)調(diào)用
publicvoidonDeleted(Context?context,int[]?appWidgetIds)刪除的時(shí)候調(diào)用
publicvoidonEnabled(Context?context) 從桌面拖出時(shí)會(huì)調(diào)用,多次拖出只調(diào)用一次
publicvoidonDisabled(Context?context) 最后一個(gè)組件刪除時(shí)調(diào)用該方法
我們這里只是覆寫(xiě)onUpdate
有一點(diǎn)要注意:和普通app應(yīng)用的service一樣,http請(qǐng)求發(fā)送不能寫(xiě)在主線程里,需要啟動(dòng)一個(gè)新的線程進(jìn)行處理。
下面來(lái)看一下實(shí)現(xiàn)的例子
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.網(wǎng)址不告訴你: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")+"------------------");
//將姓名存起來(lái)
System.out.println("--------------將獲得的名字緩存起來(lái)------------------");
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, "無(wú)用戶(hù)或未聯(lián)網(wǎng)");
}
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;
}
}
總結(jié)
以上是生活随笔為你收集整理的android+桌面组件开发,android——桌面组件的开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 以心换心,将心比心----项目经理要学会
- 下一篇: 首都师范 博弈论 5 2 1帕累托最优