配色: 字号:
开发一个android桌面
2016-12-01 | 阅:  转:  |  分享 
  
开发一个android桌面

1,关于lancher



要开发一个自己的桌面,作为程序员,觉得好多的应用都在偷偷的跑流量。

开发一个桌面程序,然后常驻系统服务,定时检查服务。

对系统的其他应用网络进行监控。把一些常用的功能集成进来。

做一个讯飞的语音服务。实现一些简单的人机交互。

2,修改配置文件



在AndroidManifest.xml配置文件中增加两行即可。























然后这个默认的activity程序就成桌面了。按home的时候。

会弹出一个选择框选择桌面。



3,进行优化



查询全部app



IntentmainIntent=newIntent(Intent.ACTION_MAIN,null);

mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

newImageView(MainActivity.this);



apps=getPackageManager().queryIntentActivities(mainIntent,0);

if(apps!=null){

for(ResolveInforesolveInfo:apps){

Log.v(TAG,resolveInfo.toString());

}

}

把返回的app显示到主界面中。

实现一个BaseAdapter类。实现getView方法。



ResolveInfoinfo=apps.get(i);



ViewconvertView=LayoutInflater.from(mContent).inflate(R.layout.text_img_view,null);

ImageViewimage=(ImageView)convertView.findViewById(R.id.image);

TextViewtext=(TextView)convertView.findViewById(R.id.text);

//设置文字和图片。

text.setText(info.loadLabel(getPackageManager()));



image.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));



//convertView.setScaleType(ImageView.ScaleType.FIT_CENTER);



//使用dp进行参数设置。进行分辨率适配。

convertView.setLayoutParams(newGridView.LayoutParams(

(int)mResources.getDimension(R.dimen.app_width),

(int)mResources.getDimension(R.dimen.app_height)));

//返回一个图文混合。

returnconvertView;

定义了一个layout






android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">




android:id="@+id/image"

android:layout_width="50dp"

android:layout_height="50dp"

android:layout_gravity="center_horizontal"/>




android:id="@+id/text"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"/>





上面是图片,下面是文字。

还定义了宽度和高度





90dp

90dp



运行效果:



很接近了。

最后在设置下打开。壁纸啥的。就都一样了。



4,全部代码



packagecom.demo.lanchertest;



importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.content.pm.ResolveInfo;

importandroid.content.res.Resources;

importandroid.net.Uri;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.AbsListView;

importandroid.widget.AdapterView;

importandroid.widget.BaseAdapter;

importandroid.widget.GridView;

importandroid.widget.ImageView;

importandroid.widget.TextView;



importcom.google.android.gms.appindexing.Action;

importcom.google.android.gms.appindexing.AppIndex;

importcom.google.android.gms.appindexing.Thing;

importcom.google.android.gms.common.api.GoogleApiClient;



importjava.security.AccessControlContext;

importjava.util.List;



importstaticjava.security.AccessController.getContext;



publicclassMainActivityextendsAppCompatActivity{



publicstaticfinalStringTAG="Lancher";



@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedwww.shanxiwang.netInstanceState);

setContentView(R.layout.activity_main);

//加载app应用。

loadApps();

GridViewgridView=(GridView)findViewById(R.id.apps_list);

//设置默认适配器。

mContent=getApplicationContext();

mResources=getResources();

gridView.setAdapter(newAppsAdapter());



//



gridView.setOnItemClickListener(clickListener);



}



privateAdapterView.OnItemClickListenerclickListener=newAdapterView.OnItemClickListener(){

@Override

publicvoidonItemClick(AdapterViewadapterView,Viewview,inti,longl){

ResolveInfoinfo=apps.get(i);

//该应用的包名

Stringpkg=info.activityInfo.packageName;

//应用的主activity类

Stringcls=info.activityInfo.name;

ComponentNamecomponet=newComponentName(pkg,cls);

Intentintent=newIntent();

intent.setComponent(componet);

startActivity(intent);

}

};





privateListapps;

privateResourcesmResources;

privateContextmContent;



privatevoidloadApps(){

IntentmainIntent=newIntent(Intent.ACTION_MAIN,null);

mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

newImageView(MainActivity.this);



apps=getPackageManager().queryIntentActivities(mainIntent,0);

if(apps!=null){

for(ResolveInforesolveInfo:apps){

Log.v(TAG,resolveInfo.toString());

}

}

}



publicclassAppsAdapterextendsBaseAdapter{



publicAppsAdapter(){

}



@Override

publicintgetCount(){

returnapps.size();

}



@Override

publicObjectgetItem(inti){

returnapps.get(i);

}



@Override

publiclonggetItemId(inti){

returni;

}



@Override

publicViewgetView(inti,Viewview,ViewGroupviewGroup){

ResolveInfoinfo=apps.get(i);



ViewconvertView=LayoutInflater.from(mContent).inflate(R.layout.text_img_view,null);

ImageViewimage=(ImageView)convertView.findViewById(R.id.image);

TextViewtext=(TextView)convertView.findViewById(R.id.text);

//设置文字和图片。

text.setText(info.loadLabel(getPackageManager()));



image.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));



//convertView.setScaleType(ImageView.ScaleType.FIT_CENTER);



//使用dp进行参数设置。进行分辨率适配。

convertView.setLayoutParams(newGridView.LayoutParams(

(int)mResources.getDimension(R.dimen.app_width),

(int)mResources.getDimension(R.dimen.app_height)));

//返回一个图文混合。

returnconvertView;

}

}

}

全部代码不过130行。但是很有意思。



献花(0)
+1
(本文系网络学习天...首藏)