Android自定义简易luancherDemo(有图有真相哦)

就两个界面,一个是所有程序,一个是开机动画设置,还有设置壁纸。

比较粗糙,因为项目停滞,所以就没有继续开发,在此分享一下,望高手莫喷。

有些代码是网上摘抄,找不到出处了,原作者莫怪咯!

效果图:

项目结构:

HomeActivity.java(所有程序界面)

  1 package com.bvin.demo.launcher;
  2 
  3 import java.util.List;
  4 
  5 import android.app.Activity;
  6 import android.content.ComponentName;
  7 import android.content.Intent;
  8 import android.content.pm.ResolveInfo;
  9 import android.os.Bundle;
 10 import android.util.Log;
 11 import android.view.Menu;
 12 import android.view.MenuItem;
 13 import android.view.View;
 14 import android.view.ViewGroup;
 15 import android.widget.AdapterView;
 16 import android.widget.BaseAdapter;
 17 import android.widget.GridView;
 18 import android.widget.ImageView;
 19 
 20 public class HomeActivity extends Activity {
 21     /** Called when the activity is first created. */
 22     
 23     List<ResolveInfo> mApp;
 24     GridView mGrid;
 25     
 26     @Override
 27     public void onCreate(Bundle savedInstanceState) {
 28         super.onCreate(savedInstanceState);
 29         loadApps();
 30         setContentView(R.layout.main);
 31         initsViews();
 32     }
 33     
 34     
 35     
 36     @Override
 37     public boolean onCreateOptionsMenu(Menu menu) {
 38         // TODO Auto-generated method stub
 39         menu.add(0, 0, 0, "设置壁纸");
 40         menu.add(0, 1, 1, "开机动画");
 41         return super.onCreateOptionsMenu(menu);
 42     }
 43 
 44 
 45 
 46     @Override
 47     public boolean onOptionsItemSelected(MenuItem item) {
 48         // TODO Auto-generated method stub
 49         switch(item.getItemId()){
 50         
 51         case 0:
 52             onSetWallPaper();
 53             break;
 54         case 1:
 55             Intent intent = new Intent(HomeActivity.this,SetActivity.class);
 56             startActivity(intent);
 57             break;
 58         
 59         }
 60         
 61         return super.onOptionsItemSelected(item);
 62     }
 63 
 64 
 65 
 66     void loadApps(){
 67         Intent mainIntent = new Intent(Intent.ACTION_MAIN,null);
 68         mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 69         mApp = this.getPackageManager().queryIntentActivities(mainIntent, 0);
 70         Log.e("mApp", ""+mApp.size());
 71     }
 72     
 73     void initsViews(){
 74         mGrid = (GridView)findViewById(R.id.appGrid);
 75         mGrid.setAdapter(new AppsAdapter());
 76         
 77         mGrid.setOnItemClickListener(new GridView.OnItemClickListener(){
 78 
 79             @Override
 80             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
 81                     long arg3) {
 82                 // TODO Auto-generated method stub
 83                 ResolveInfo info = mApp.get(arg2);
 84                 String pkg = info.activityInfo.packageName;
 85                 String cls = info.activityInfo.name;
 86                 ComponentName compoment = new ComponentName(pkg,cls);
 87                 Intent i = new Intent();
 88                 i.setComponent(compoment);
 89                 startActivity(i);
 90             }
 91             
 92         });
 93     }
 94     
 95     void onSetWallPaper(){
 96         
 97         Intent pickWallPager = new Intent(Intent.ACTION_SET_WALLPAPER);
 98         Intent chooser = Intent.createChooser(pickWallPager, "chooser_wallpaper");
 99         startActivity(chooser);
100     }
101     
102     class AppsAdapter extends BaseAdapter{
103 
104         @Override
105         public int getCount() {
106             // TODO Auto-generated method stub
107             return mApp.size();
108         }
109 
110         @Override
111         public Object getItem(int position) {
112             // TODO Auto-generated method stub
113             return mApp.get(position);
114         }
115 
116         @Override
117         public long getItemId(int position) {
118             // TODO Auto-generated method stub
119             return position;
120         }
121 
122         @Override
123         public View getView(int position, View convertView, ViewGroup parent) {
124             // TODO Auto-generated method stub
125             ImageView i;
126             if(convertView==null){
127                 i = new ImageView(HomeActivity.this);
128                 i.setScaleType(ImageView.ScaleType.FIT_CENTER);
129                 i.setLayoutParams(new GridView.LayoutParams(70, 70));
130                 
131             }else{
132                 i = (ImageView)convertView;
133             }
134             ResolveInfo info = mApp.get(position);
135             i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
136             return i;
137         }
138         
139         
140     }
141 }

 

SettingActivity(开机动画设置界面)

  1 package com.bvin.demo.launcher;
  2 
  3 import java.io.DataOutputStream;
  4 import java.io.File;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.io.InputStream;
  9 import java.io.OutputStream;
 10 
 11 import android.app.Activity;
 12 import android.app.ProgressDialog;
 13 import android.os.Bundle;
 14 import android.util.Log;
 15 import android.view.View;
 16 import android.widget.Button;
 17 import android.widget.Toast;
 18 
 19 public class SetActivity extends Activity{
 20 
 21     Button btDell;
 22     Button byMi;
 23     String apkRoot="chmod 777 /system/media";
 24     @Override
 25     protected void onCreate(Bundle savedInstanceState) {
 26         // TODO Auto-generated method stub
 27         super.onCreate(savedInstanceState);
 28         setContentView(R.layout.setwallpaper_layout);
 29         initViews();
 30     }
 31 
 32     void initViews(){
 33         btDell  = (Button)findViewById(R.id.btDell);
 34         byMi  = (Button)findViewById(R.id.btMis1);
 35         
 36         btDell.setOnClickListener(new View.OnClickListener() {
 37             
 38             @Override
 39             public void onClick(View v) {
 40                 // TODO Auto-generated method stub
 41                 try {
 42                     if(rootConmmand(apkRoot)){
 43                         write2System(R.raw.dell);
 44                         setTitle("当前开机动画为戴尔原生动画");
 45                     }else{
 46                         Toast.makeText(SetActivity.this, "未获取root权限", Toast.LENGTH_SHORT).show();
 47                     }
 48                     
 49                 } catch (FileNotFoundException e) {
 50                     // TODO Auto-generated catch block
 51                     e.printStackTrace();
 52                 }
 53             }
 54         });
 55         byMi.setOnClickListener(new View.OnClickListener() {
 56             
 57             @Override
 58             public void onClick(View v) {
 59                 // TODO Auto-generated method stub
 60                 try {
 61                     if(rootConmmand(apkRoot)){
 62                     rootConmmand("chmod 777 /system/media/bootanimation.zip");
 63                     write2System(R.raw.mi);
 64                     setTitle("当前开机动画为小米开机动画");
 65                     }else{
 66                         Toast.makeText(SetActivity.this, "未获取root权限", Toast.LENGTH_SHORT).show();
 67                     }
 68                 } catch (FileNotFoundException e) {
 69                     // TODO Auto-generated catch block
 70                     e.printStackTrace();
 71                 }
 72             }
 73         });
 74         
 75     }
 76     
 77     public static boolean rootConmmand(String cmd){
 78         
 79         Process process = null;
 80         DataOutputStream  os = null;
 81         
 82         try {
 83             process = Runtime.getRuntime().exec("su");
 84             os = new DataOutputStream(process.getOutputStream());
 85             os.writeBytes(cmd+"\n");
 86             os.writeBytes("exit\n");
 87             os.flush();
 88             process.waitFor();
 89             
 90         } catch (IOException e) {
 91             // TODO Auto-generated catch block
 92             Log.d("*** DEBUG ***", "ROOT REE" + e.getMessage());
 93             e.printStackTrace();
 94         } catch (InterruptedException e) {
 95             // TODO Auto-generated catch block
 96             e.printStackTrace();
 97         }finally{
 98             
 99             try {
100                 if(os!=null){
101                     os.close();
102                 }
103                 process.destroy();
104             } catch (IOException e) {
105                 // TODO Auto-generated catch block
106                 e.printStackTrace();
107             }
108         }
109         Log.d("*** DEBUG ***", "Root SUC ");
110         return true;
111     }
112     
113     private void write2System(int src) throws FileNotFoundException{
114         
115         ProgressDialog pd = new ProgressDialog(this);
116         pd.show();
117         InputStream is = this.getResources().openRawResource(src);
118         OutputStream os = null;
119         File file = new File("/system/media","bootanimation.zip");
120         
121         os = new FileOutputStream(file);
122         
123         
124         byte[] buf = null;
125         int length;
126         try {
127             buf = new byte[1024];
128             while((length=is.read(buf))!=-1){
129                 os.write(buf, 0, length);
130                 Log.e("写", ""+length);
131                 
132             }
133         } catch (IOException e) {
134             // TODO Auto-generated catch block
135             e.printStackTrace();
136         }finally{
137             if(is!=null){
138                 try {
139                     is.close();
140                 } catch (IOException e) {
141                     // TODO Auto-generated catch block
142                     e.printStackTrace();
143                 }
144             }
145             
146         }
147         rootConmmand("chmod 777 /system/media/bootanimation.zip");
148         Log.e("dfg", "ok");
149         pd.dismiss();
150         Toast.makeText(this, "开机动画安装成功,可重启查看效果", Toast.LENGTH_LONG).show();
151         
152     }
153     
154 }

没有挂载为读写

加上mount -rw -o remount /dev/block/mmcblk0p4 /system

posted @ 2012-10-11 20:54  bvin  阅读(1088)  评论(0编辑  收藏  举报