androidlauncher开发
1. Android Launcher 如何去掉主菜单,所有应用摆在桌面,类似小米桌面
那个桌面就是那样的改不了,你可以下载一个桌面替代他,比如GO桌面,小米桌面我没试过能否下载,你也可以搜索下。应该也是可以的。系统设置里面可以设置默认使用哪个桌面。
。。。。。。晕原来你是搞开发的呀,你可以把所有图标都放到workspace上,把应用列表屏蔽了,workspace的数据来源于LauncherModler类,里面会读一个数据库得到一个列表,然后再数据绑定把这个列表啪啪啪显示到workspace上,你可以去修改那个读数据库的方法,想办法把所有应用都加到那个列表上去。
2. android launcher 怎么做 有详细的教程吗
Launcher工程很大的 这个怎么给你说啊 你去下载Launcher源码看看 结合网络上高手给出的解析,反正看着很恼火
3. 《Android Launcher应用开发》怎么样
暂时还是不行,目前java已经说了可以使用delphi和vs进行android应用程序开发, 提供了dalvik虚拟机,但是并没有放出相关插件,可能有第三方工具实现,但是估计不好。 现在最多使用的还是eclipse进行android应用层的开发。 对操作系统没有具体要求,windows, linux和OSX都有sdk 官方建议linux 希望可以帮助到你。
4. 如何第一次写Android Launcher Switcher就上手
有玩 Android 系统手机的人应该都有使用过 Android Launcher 之类的应用程式,它是用于变换桌面环境或操作的应用程式,或可以说是变更使用者经验 (UX) 的程式。在命名上我个人是比较偏好称作 Home App,因为它是按下 Home 键切换或执行的程式,而且它也是跑在 home screen 的桌面程式;而 Launcher 的狭定义是来自 Android 官方预设的 Home app,即 Launcher.apk。我自己下载 Android source Froyo,里面预设是 Launcher2.apk (com.android.launcher2),位于 {SourceDir}/packages/apps 下。
Activity 可以在 AndroidManifest.xml 中注册启动器,启动器也就是 launcher,它不代表是 Launcher.apk 或任何一种 Home App,而是指应用程式进入口会显示在 Home App (或 Launcher)上。而 Home App 一般来说都没有注册启动器,因此有人就写了侦测系统中所有 Home App 的程式,也就是 Home App Switcher。比较好的 Swicher 还会提供清除和设定 default Home App。我在 HTC Incredible S 中安装了数种 Home App,即 Launcher7、ADW、Zeam、Regina、LauncherPro、Home Sample、Home++,当然预设的 HTC Sense 也有。其中只有 Zeam 是有注册 launcher 分类,所以在应用程式选单上就能找得到。
Intent and Intent Filters
在 Android 系统中,Intent 是极为重要,也是最基本要知道的东西。对于系统而言,Intent 就像是应用程式的描述,也类似标签的概念。根据 Intent 内容,系统或应用程式能够去使用与搜寻其他应用程式与其提供的服务。Intent 资讯是注册在程式的 AndroidManifest.xml,并包含在 Intent Filters 标签的内容中。当搜寻系统中的应用程式时,会去比对应用程式的 Intent Filters,而搜寻条件是包装在 Intent 物件中以找到符合某种条件程式。Intent Filters 的内容就像是应用程式的索引,内容比对成功就会回传相对应的 ResolveInfo。有关 Intent 的详细内容可以参考底下提供的官方网页连结 [1]。
一个 Activity 基本上要在 AndroidManifest.xml 的 intent-filter 中注册一个 action 和 category; action预设是 intent.ACTION_MAIN,而 category 预设是 intent.CATEGORY_LAUNCHER。根据官方网站说明,ACTION_MAIN 指该 Activity 是个可开始启动的进入点;CATEGORY_LAUNCHER 指该 Activity 在 Home App 上有启动器,也就是在应用程式选单上会出现该 Activity 的 icon,以方便执行。注册内容如下:
<activity android:name=".HomeSelector" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
一个应用程式中,可以有多个 Activity 都注册 CATEGORY_LAUNCHER,那在安装完后就会有多个 icon 出现在程式选单上,分别能执行各个 Activity。如果 Activity 没有注册 CATEGORY_LAUNCHER,那至少要注册 CATEGORY_DEFAULT,因为它是系统使用 Intent 搜寻的预设条件之一。注册 CATEGORY_DEFAULT 后该 Activity 不会有 icon 在应用程式选单上出现,所以一般都是给非 ACTION_MAIN 的 Activity 注册,如 intent.ACTION_VIEW 之类的。如果 Activity 只注册 action,一般预设 Intent 的搜寻可能会失效,那就需要使用显形式启动,以上面的例子来看,就是指定启动 HomeSelector,例子如下:
view sourceprint?
1 Intent i = new Intent(this, HomeSelector.class);
2 startActivity(i);
如果是指定启动外部程式,那可以按照下面的做法:
view sourceprint?
1 Intent myIntent = new Intent();
2 myIntent.setClassName("com.KaDaNet", "com.KaDaNet.KaDaNet_MainController");
3 startActivity(myIntent);
那隐含式搜寻呢?如果你有 Android SDK 有研究,那你应该看过 SDK 中的 sample code,其中的 API Demo 展示了许多使用 API 功能的 Activity,而 API Demo 是由阶层式列表对这些 Activity 分类。这个阶层式列表的内容是动态生成出来的,由 loadLabel 和 activityInfo.name 去分类。因为是动态生成,所以就不会把列表写死,那所有列表上要显示的 Activity 资讯,就是利用隐含式搜寻获得,程式码如下:
view sourceprint?
1 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
2 mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);
3 PackageManager pm = getPackageManager();
4 List<resolveinfo> list = pm.queryIntentActivities(mainIntent, 0);
API Demo 只显示 category 注册为 CATEGORY_SAMPLE_CODE 的 Activity 的资讯。把条件塞进 Intent 后利用 queryIntentActivities 搜寻,其中的一个 Activity 注册内容如下:
<activity android:name=".app.CustomDialogActivity"
android:label="@string/activity_custom_dialog"
android:theme="@style/Theme.CustomDialog">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>
Home App and Intent Filters
在 Android 中,Home App 需要告诉系统自己是一个 Home App,那它才会以 Home 的方式去执行,也就是跑在 home screen 上。同样的,Home App 透过在 AndroidManifest.xml 上注册 category 为 intent.CATEGORY_HOME 就可以了。以 SDK sample 中的 Home 为例,其注册内容如下:
<activity android:name="Home" android:theme="@style/Theme"
android:launchMode="singleInstance"
android:stateNotNeeded="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
搜寻 Home App 的做法与 API Demo 相同,使用 PackageManager 中的 queryIntentActivities 即可。在下面范例中,对搜寻到的结果取出我们想要的资讯包装成 HomeInfo,并回传 List。
view sourceprint?
01 private List<homeinfo> queryHomeApp() {
02 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
03 mainIntent.addCategory(Intent.CATEGORY_HOME);
04 PackageManager pm = getPackageManager();
05 List<resolveinfo> rList = pm.queryIntentActivities(mainIntent, 0);
06 List<homeinfo> homeList = new ArrayList<homeinfo>();
07
08 for(ResolveInfo r : rList) {
09 homeList.add(new HomeInfo(r, pm));
10 }
11 return homeList;
12 }
这里使用 HomeInfo 类别包装四种资讯,即类别名称、封包名称、Activity 标签和 Activity icon。
view sourceprint?
01 public class HomeInfo {
02 public String name;
03 public String packageName;
04 public String label;
05 public Drawable icon;
06
07 public HomeInfo(ResolveInfo rInfo, PackageManager pm) {
08 name = rInfo.activityInfo.name;
09 packageName = rInfo.activityInfo.packageName;
10 label = rInfo.loadLabel(pm).toString();
11 icon = rInfo.loadIcon(pm);
12 }
13 }
很简单吧!这样就能取得系统中所有的 Home App 资讯,接下来根据这些资讯来切换 Home App。切换的方式,先前也提到过了,那就是显形式启动!
view sourceprint?
1 public void switchHome(String packageName) {
2 Intent homeIntent = new Intent("android.intent.action.MAIN");
3 homeIntent.addCategory("android.intent.category.HOME");
4 homeIntent.addCategory("android.intent.category.DEFAULT");
5 homeIntent.setPackage(packageName);
6 this.startActivity(homeIntent);
7 this.finish();
8 }
在程式界面上显示所有已安装的 Home App 资讯,最简单的方式是利用 ListView,再新建一个 list adapter 进行配接并设定 list item 按下后要处理的事,以上面的程式码来看就是我们要处理的事,即切换到另一个 Home App。
5. Android 自定义Launcher开发,添加自己开发的Widget,不能进行更新,该Widget在系统launcher可更新
你的意思是自己开发的Widget添加到自定义的Launcher不能进行更新,而添加到系统Launcher可以进行更新?
如果是这样,考虑是不是权限问题?
可否贴下更新的的代码,方便定位问题。
6. android 怎样调用launcher
如果你要定制一个Android系统,你想用你自己的Launcher(Home)作主界面来替换Android自带的Home,而且不希望用户安装的Launcher来替换掉你的Launcher,应该如何来实现呢?
我们可以通过修改Framework层来实现这样的功能。
1) 首先了解一下Android的启动过程。
Android系统的启动先从Zygote开始启动,然后......(中间的过程就不说了).....一直到了SystemServer(framework)这个地方,看到这段代码:
/**
* This method is called from Zygote to initialize the system. This willcause the native
* services (SurfaceFlinger, AudioFlinger, etc..) to be started. Afterthat it will call back
* up into init2() to start the Android services.
*/
native public static void init1(String[] args);
public static void main(String[] args) {
if (SamplingProfilerIntegration.isEnabled()) {
SamplingProfilerIntegration.start();
timer = new Timer();
timer.schele(new TimerTask() {
@Override
public void run() {
SamplingProfilerIntegration.writeSnapshot("system_server");
}
}, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);
}
// The system server has to run all of the time, so it needs to be
// as efficient as possible with its memory usage.
VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);
System.loadLibrary("android_servers");
init1(args);
}
public static final void init2() {
Log.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}
从SystemServer的main函数开始启动各种服务:
首先启动init1,然后启动init2.从上面的注释可以看到:init1这个方法时被Zygote调用来初始化系统的,init1会启动native的服务如SurfaceFlinger,AudioFlinger等等,这些工作做完以后会回调init2来启动Android的service。
这里我们主要来关注init2的过程。init2中启动ServerThread线程,ServerThread中启动了一系列的服务,比如这些:
ActivityManagerService
EntropyService
PowerManagerService
TelephonyRegistry
PackageManagerService
AccountManagerService
BatteryService
HardwareService
Watchdog
SensorService
BluetoothService
StatusBarService
ClipboardService
InputMethodManagerService
NetStatService
ConnectivityService
AccessibilityManagerService
NotificationManagerService
MountService
DeviceStorageMonitorService
LocationManagerService
SearchManagerService
FallbackCheckinService
WallpaperManagerService
AudioService
BackupManagerService
AppWidgetService
这些大大小小的服务起来以后,开始
((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady()
在systemReady后开始开始启动Launcher。在寻找Launcher的时候是根据HOME的filter(在Manifest中定义的<categoryandroid:name="android.intent.category.HOME" />)来过滤。
然后根据filter出来的HOME来启动,如果只有一个HOME,则启动这个HOME,如果用户自己装了HOME,那就会弹出来一个列表供用户选择。
我们现在希望从这里弹出我们自己定制的Launcher,同时也不希望弹出选择HOME的界面,我们不希望用户修改我们的home,比如我们的home上放了好多广告,以及强制安装的程序,不希望用户把它干掉。
我们可以通过这样来实现:
2) 定义一个私有的filter选项,然后用这个选项来过滤HOME.
一般情况下我们使用Manifest中定义的<categoryandroid:name="android.intent.category.HOME"来过滤的,我们现在增加一个私有的HOME_FIRST过滤。
在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加两行代码
//lixinso:添加CATEGORY_FS_HOME
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_FS_HOME= "android.intent.category.FS_HOME";
3)修改和CATEGORY_HOME相关的所有的地方,都改成CATEGORY_FS_HOME,主要是framework中的这几个地方:使用grep命令查找要修改的地方:
grep CATEGORY_HOME -l * -R
将上述文件中和CATEGORY_HOME相关的所有的地方,都改成CATEGORY_FS_HOME。
4) 写一个自己的Launcher.
可以参考android sample中的Launcher,或者android源代码中的 /packages/apps/Launcher 来写。
在Launcher中标记其是不是Launcher的最关键的代码时Manifest中的filter:android:name="android.intent.category.HOME"
现在我们定义了自己的filter,那么,我们在我们自己写的Launcher中将Manifest改为:
<application android:process="android.process.acore3"android:icon="@drawable/icon"android:label="@string/app_name">
<activity android:name=".FirstAppActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category. FS_HOME" />
<categoryandroid:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
</activity>
</application>
然后将编译好的apk放到方式fs100_root/system/app目录下。
5)将Android自带的Launcher删除掉
包括源代码(packages/apps/Launcher)和apk(/out/target/proct/generic/system/app/Launcher.apk)。
6) 重新编译Android
做完这些工作,就可以重新编译Android了,我们可以编译修改过的几个相关的包,可以用mmm命令来编译部分的改动。这里需要这样编译:
$ source build/envsetup.sh
$ lunch
$ mmm frameworks/base
$ mmm frameworks/base/services/java
$ mmm frameworks/policies/base/mid
$ mmm frameworks/policies/base/phone
重新启动开发板,从开发板上就可以看到启动的Launcher是我们自己的Launcher,不会出现默认的Launcher了,也不会出现选择界面。
9)我们再验证一下,如果用户装上了一个其他的Launcher(Home)会怎么样。
从网上找一个一般的Launcher或者自己写一个一般的Launcher装上去,重新启动,不会出现选择界面。
按HOME键也不会出来两个HOME来选择。
这样我们就牢牢控制了用户的桌面。
只有我们自己定制的HOME才能装上。这对于定制Android设备的厂商很有用处。
7. android可以自己开发一个launcher,并且替换掉系统的吗
可以,但是不建议这么做,开发的laucher的和系统的其他app兼容性需要考虑。
开发一个laucher:在你的app的androidmanifest.xml中定义<category android:name="android.intent.category.LAUNCHER" />
删除系统的laucher:需要获得root权限,建议保留,因为充满很多危险。
默认:开发的launcher设置默认就好了。
安卓系统中的桌面启动器,安卓系统的桌面UI统称为Launcher
8. android可以自己开发一个launcher,并且替换掉系统的吗
可以的。
现在基于安卓的修改版系统,都是自己开发launcher 的。
特别表现在网络电视机顶盒这一块,尤为突出。
9. 安卓开发,图标背景颜色怎么更换
android launcher开发之图标背景颜色替换:
桌面第一次加载时是默认读取一个xml配置文件,完成配置工作。这个配置文件在Launcher目录下,路径是:Launcher esxmldefault_workspace.xml 。
XML文件就是刚升级,Launcher第一次显示的时候,会读取的配置文件。default_workspace。xml里面可以配置APP快捷方式、Widget、Search搜索栏等。
launcher里面负责解析default_workspace.xml文件的方法是 LauncherProvider.java里面的loadFavorites方法。
其实就是一个分析XML和写入数据库的过程,LauncherProvider.java是整个Launcher的数据来源,知道这些图标如何加载出来之后对做屏幕是坏 修改背景大小 行列等都有好处。
10. android开发者:修改android图标ic_launcher,为自定义的.
android图标ic_launcher的修改方式:
将自定义的图片复制到 res/drawable目录下,例如 logo.png.
打开AndroidManifest.xml文件.
在application节点中修改android:icon为android:icon="@drawable/logo"即可.
注意,部分Android手机的桌面有缓存,改了icon以后,桌面应用图标并没有变,需要重启手机才会生效.