开发一个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(AdapterView>adapterView,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行。但是很有意思。
|
|