文档章节

Android Luncher开发(1)

younchen
 younchen
发布于 2014/02/14 16:22
字数 526
阅读 182
收藏 4

  Android 中Luncher 负责加载系统中安装的app,文件夹, 控件 并且将需要在桌面显示出来的app,文件夹,组件展现出来。

其中要显示的组件信息都存在系统的provider当中。

 

 简单的luncher 实现:

  1. 创建一个android 工程,在Androidmanifest.xml文件的 MainActivity 中 Intent-filter标签中添加以下代码,红色字体部分:

  

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.runinnerappdemo.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <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>

    </application>

 编译运行后,按home键时,就会弹出一个窗口,会让你选择,Home的内容:

 这时就可以选择我们自己写的那个工程,开机的时候也一样会提示该窗口。

 以下代码实现的功能是在ListView 中显示可运行程序的包名,点击则运行该程序

工程代码:

 MainActivity:

package com.example.runinnerappdemo;

import java.util.List;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MainActivity extends Activity implements OnItemClickListener{

 ListView listView;
 MyBaseAdapter adapter;
 List<ResolveInfo> list;
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 setContentView(R.layout.main);
 listView=(ListView)findViewById(R.id.listView1);
 
 adapter=new MyBaseAdapter(this);
 listView.setAdapter(adapter);
 listView.setOnItemClickListener(this);
 
 addApplication();
 
 }
 
 

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
 return true;
 }
 
 /**
  * 加载可启动的app
  */
 private void addApplication(){
 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        list= getPackageManager().queryIntentActivities(mainIntent, 0);
        for (ResolveInfo resolveInfo : list) {
         adapter.addItem(resolveInfo.activityInfo.name);
 }
 adapter.notifyDataSetChanged();
 }

 @Override
 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
 // TODO Auto-generated method stub
 
  ResolveInfo info=list.get(arg2);
  Intent intent =new Intent();
  intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
  startActivity(intent);
 
 }

}



MybaseAdapter代码:

package com.example.runinnerappdemo;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyBaseAdapter extends BaseAdapter {

	private Holder holder;
	private LayoutInflater mInflater;
	private ArrayList<String> n_list;

	public MyBaseAdapter(Context context) {
		mInflater = LayoutInflater.from(context);
		n_list = new ArrayList<String>();
	}

	public void addItem(String item) {
		n_list.add(item);
	}

	public void clearItems() {
		n_list.clear();
		notifyDataSetChanged();
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return n_list.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return n_list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		if (convertView == null) {
			holder = new Holder();
			convertView = mInflater.inflate(R.layout.item, null);
			holder.textView1 = (TextView) convertView
					.findViewById(R.id.textView1);
			convertView.setTag(holder);
		}

		Holder holder = (Holder) convertView.getTag();

		holder.textView1.setText(n_list.get(position));
		return convertView;
	}

	/**
	 * 
	 * @author admin
	 * 
	 */
	class Holder {
		TextView textView1;
	}
}


© 著作权归作者所有

上一篇: jsp乱码问题
下一篇: adb shell
younchen
粉丝 8
博文 94
码字总数 29970
作品 0
延吉
程序员
私信 提问
andrpid开发pad怎么屏蔽home键和power键吗?

1. android在2.0系统时,home键可以通过onKeyDown屏蔽,但是到4.0时就无效了,除了设置luncher还有其他方法么? 2. android手机上的三个按键是back,home和menu,但是pad上只有back,home另外...

爵色
2013/10/23
1K
1
Android中如何使用ViewPager实现类似laucher左右拖动效果

现在很多Android应用在首次安装完都会有指引如何使用该应用的某些功能的指引界面,这样会获得很好的用户体验,能够帮助用户更好使用应用的某些功能。其实该功能和Android主界面的 luncher 的...

MrLovelyCbb
2012/05/07
0
0
android应用开发简单理解

做了个应用,总结下对于android 应用的简单理解 从上图可以简单看出,主线程启动,这里把各种操作称为action,主要分为3部分: ui(视图绘制)、event(事件处理)和other(数据或网络等处理) 1.当...

blackylin
2013/06/18
0
2
[Android]Android开发入门之HelloWorld

引言: 在做Unity开发的时候,发现这么个问题,虽然Unity是跨平台的,能够进行Android,IOS,Web,PC等开发,但如果要实现一些稍微系统 层的东西,还是需要通过通信,调用原系统的接口(自定义...

丁小未
2014/04/08
0
0
理解android.intent.action.MAIN 与 android.intent.cate

刚才看了一下sundy的视频《LLY110426_Android应用程序启动》,里面讲到luncher这个activity通过获取应用程序信息来加载应用程序,显示给用户,其中就是通过一个应用程序中的AndroidManifest...

ForingY
2016/07/31
36
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象方面的一些东东

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" cont......

流年那么伤
25分钟前
2
0
git 过滤文件夹和文件(IDEA)

最近使用git版本管理工具遇到一件很烦的事情,commit时总会把.idea、.*.iml和target文件添加进来,实际开发中,这些是需要过滤掉的。在.gitnore文件添加了过滤不起作用。下面介绍一种成功过滤...

uug
32分钟前
2
0
Spark Streaming 实时统计商户当日累计PV流量

一、问题 对实时流量日志过滤筛选商户流量,对每个商户的流量进行累计,统计商户实时累计流量。 当时间超过24时时,重新统计当日商户的实时累计流量。 二、实现步骤 1、采用Spark Streaming...

boonya
37分钟前
2
0
如果Task与Event 创建了记录类型后,不出现在Lightning的Activities中

如果在Lightning的Activities没出现这两个Button,但是在页面布局的Lightning 按钮区也存在,全局操作的记录类型就需要选择一个,否则不会出现

在山的那边
46分钟前
2
0
ddd中的子域和界限上下文

我们先来说说子域是什么?子域在我的理解是在一个庞大的系统中可以明显感知的不同的区块,如果在电商模块中,商品目录,订单,物流,库存,发票等等都可以感知他们明显的不同,可以认为是子域...

算法之名
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部