开发一个android桌面

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53363731 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

1,关于lancher



要开发一个自己的桌面,作为程序员,觉得好多的应用都在偷偷的跑流量。
开发一个桌面程序,然后常驻系统服务,定时检查服务。
对系统的其他应用网络进行监控。把一些常用的功能集成进来。
做一个讯飞的语音服务。实现一些简单的人机交互。
参考一个哥们写的:
http://blog.csdn.net/sljjyy/article/details/11927713

2,修改配置文件



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

        <activity android:name=".MainActivity">
            <intent-filter>
                <!-- 增加lancher配置-->
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />

                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

然后这个默认的activity程序就成桌面了。按home的时候。
会弹出一个选择框选择桌面。

3,进行优化



查询全部app

Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        new ImageView(MainActivity.this);

        apps = getPackageManager().queryIntentActivities(mainIntent, 0);
        if (apps != null) {
            for (ResolveInfo resolveInfo : apps) {
                Log.v(TAG, resolveInfo.toString());
            }
        }

把返回的app显示到主界面中。
实现一个BaseAdapter 类。实现getView 方法。

ResolveInfo info = apps.get(i);

            View convertView = LayoutInflater.from(mContent).inflate(R.layout.text_img_view, null);
            ImageView image = (ImageView) convertView.findViewById(R.id.image);
            TextView text = (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(new GridView.LayoutParams(
                    (int) mResources.getDimension(R.dimen.app_width),
                    (int) mResources.getDimension(R.dimen.app_height)));
            //返回一个图文混合。
            return convertView;

定义了一个layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" />

</LinearLayout>

上面是图片,下面是文字。
还定义了宽度和高度

<resources>
    <dimen name="app_width">90dp</dimen>
    <dimen name="app_height">90dp</dimen>
</resources>

运行效果:

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

4,全部代码


package com.demo.lanchertest;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.appindexing.Thing;
import com.google.android.gms.common.api.GoogleApiClient;

import java.security.AccessControlContext;
import java.util.List;

import static java.security.AccessController.getContext;

public class MainActivity extends AppCompatActivity {

    public static final String TAG = "Lancher";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //加载app应用。
        loadApps();
        GridView gridView = (GridView) findViewById(R.id.apps_list);
        //设置默认适配器。
        mContent = getApplicationContext();
        mResources = getResources();
        gridView.setAdapter(new AppsAdapter());

        //

        gridView.setOnItemClickListener(clickListener);

    }

    private AdapterView.OnItemClickListener clickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            ResolveInfo info = apps.get(i);
            //该应用的包名
            String pkg = info.activityInfo.packageName;
            //应用的主activity类
            String cls = info.activityInfo.name;
            ComponentName componet = new ComponentName(pkg, cls);
            Intent intent = new Intent();
            intent.setComponent(componet);
            startActivity(intent);
        }
    };

    private List<ResolveInfo> apps;
    private Resources mResources;
    private Context mContent;

    private void loadApps() {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        new ImageView(MainActivity.this);

        apps = getPackageManager().queryIntentActivities(mainIntent, 0);
        if (apps != null) {
            for (ResolveInfo resolveInfo : apps) {
                Log.v(TAG, resolveInfo.toString());
            }
        }
    }

    public class AppsAdapter extends BaseAdapter {

        public AppsAdapter() {
        }

        @Override
        public int getCount() {
            return apps.size();
        }

        @Override
        public Object getItem(int i) {
            return apps.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ResolveInfo info = apps.get(i);

            View convertView = LayoutInflater.from(mContent).inflate(R.layout.text_img_view, null);
            ImageView image = (ImageView) convertView.findViewById(R.id.image);
            TextView text = (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(new GridView.LayoutParams(
                    (int) mResources.getDimension(R.dimen.app_width),
                    (int) mResources.getDimension(R.dimen.app_height)));
            //返回一个图文混合。
            return convertView;
        }
    }
}

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

5,总结



本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53363731 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

开发一个自定义桌面还是挺有意思的。
想咋控制就咋控制呢。一页显示多少app,文字大小,图标。

时间: 2024-10-25 08:16:38

开发一个android桌面的相关文章

真心求教关于自动化Web请求的开发问题,类似于开发一个12306桌面抢票软件,具体请进呢

问题描述 真心求教关于自动化Web请求的开发问题,类似于开发一个12306桌面抢票软件,具体请进呢 Web开发确实是博大精深,因为目前个人是开发手游,因为某些原因需要暂时做这么一个东西,但时间的问题不太允许我深入的研究Web开发,所以特来求教各位大神,我需要做的这个东西和之前一直流传的12306桌面抢票软件很像.就是根据某些网站写一个外挂软件,让一些需要手动完成的操作,代码来自动完成. 刚开始我以为Web请求一般都用一个拼接好的url直接访问,然后获得一些数据,接着再处理这些数据就好了.但事实证

安卓应用开发-一个android程序的疑问?

问题描述 一个android程序的疑问? 初学安卓开发,有一个关于animation的问题.我是想试一个实现侧滑动的效果,用了一个铺满屏幕的Framelayout F里面放了两个不同背景色的view.view A是铺满整个屏幕,view B是20宽度,然后在activity的onCreat里设置B的LayoutParam的leftMargin=-20让它从左边超出屏幕.之后对Framelayout对象创建了一个移动动画对象,让其右移动50距离,我以为这样就可以将B和A一起移动了,可是运行后发现只

背景设置-android桌面开发如何设置系统内置动态壁纸

问题描述 android桌面开发如何设置系统内置动态壁纸 急!!! 我自己编写了一个android桌面,添加壁纸设置功能,调用系统壁纸选择器后,设置系统动态壁纸无效果,发现桌面背景还是没变化,但是设置静态的图片又可以,求大神大师们解答? 是与布局空间的属性有关还是与AndroidManifest.xml中activity属性参数有关?

桌面壁纸设置-android桌面开发动态壁纸设置问题?

问题描述 android桌面开发动态壁纸设置问题? 我自己写了一个android桌面,但无法设置动态壁纸,但android自带的桌面又能设置,设置的动态壁纸是系统内置的,android系统为4.0,总是报如下错误:V/RenderScript( 2118): 0x128990 RS Thread exited V/RenderScript( 2118): 0x128990 Context::~Context done V/RenderScript( 2118): 0x128990 rsConte

Intellij IDEA开发第一个android应用教程

用惯eclipse的同学们可以试试通过Intellij IDEA来开发一个android应用.下面是具体的教程. 首先:下载Intellij IDEA.最新版本是12.官方提供两个版本.一个是Community Edition,包含有android,javase的开发环境,是免费开源的.另一个是Ultimate Edition,收费的.可以试用30天.这里我下载的是Community Edition.下载完成后就是普通的安装完成即可. 其次:启动Intellij IDEA,第一次启动会比较慢.同

android桌面widget开发,如何设置widget在桌面显示的标题?

问题描述 android桌面widget开发,如何设置widget在桌面显示的标题? 我在widget开发中遇到一个问题,我想让widget添加到桌面时图标下方显示标题,就像系统图标一样.最初我是在widget的activity布局文件中增加一个textview,但最后发现这样显示的文字很难和系统图标文字保持对齐.我的方法是不是错了,请高手指教.

sdk-问一个Android开发的环境安装问题!求解!

问题描述 问一个Android开发的环境安装问题!求解! 我安装Android SDK点击SDK Manager.exe之后这个界面不是有很多的包可以安装吗?怎么我的这个就是这么点希望大神帮我下! 解决方案 参考下这个, http://jingyan.baidu.com/article/b0b63dbfd0948c4a483070ea.html 因为现在国内连不上google了... 解决方案二: 参考下这个, http://jingyan.baidu.com/article/b0b63dbfd

安卓开发一个桌面软件如何替换系统所有app图标,注意是所有的APP图标哦,不是这个桌面软件的图标

问题描述 安卓开发一个桌面软件如何替换系统所有app图标,注意是所有的APP图标哦,不是这个桌面软件的图标 想做一个APP跟什么QQ桌面之类的,能够替换桌面壁纸,更换主题这样的,现在遇到的问题就是能够换壁纸,但是更换系统APP图标遇到了技术上的瓶颈,求各路大神帮忙啊,小弟跪谢.

非技术-现在开发一个新游戏,应该先做iOS版还是Android版?

问题描述 现在开发一个新游戏,应该先做iOS版还是Android版? 之前一直觉得是从iOS版开始,但是最近听到几个朋友说iOS审核慢,刷榜厉害,而且用户数也远不如Android了.大家怎么看? 解决方案 重要的是看技术(开发哪个更容易),周期更短.更有app store推广经验若游戏成熟,两个最终都要做的,目前这态势,看你定位了,不然暂不用考虑用户数问题 解决方案二: 我基本是根据利益获取模式,如果是想App收费,会先做iOS的,如果是道具收费.免费,就根据开发的情况来定.2个平台都会做,但是