精华内容
下载资源
问答
  • Android手机应用管理源码,一个安卓手机上的应用管理程序,附有完整的源代码,Android的环境真不好调啊,没抓到运行截图,Android达人自己下载源码摸索吧,这个软件不但可以却手机上的应用进行管理,还具备进程管理...
  • MTK手机应用管理

    2018-01-08 13:52:56
    使用MTK平台的手机用户请注意,以下是应用管理技术。 1----登陆www.mrp88.com,进入mrp软件的更多; 2-----在进入系统工具的更多; 3----把MRP游戏列表驱动文件放在手机的mrp文件夹下,输入*#220807#启动mrp游戏...
    使用MTK平台的手机用户请注意,以下是应用管理技术。
    1----登陆www.mrp88.com,进入mrp软件的更多;
    2-----在进入系统工具的更多;
    3----把MRP游戏列表驱动文件放在手机的mrp文件夹下,输入*#220807#启动mrp游戏列表.
            例如手机的mrp文件夹是mythorad,把dsm_gm放在这个文件夹下就可以了.
    4-----在该网站下载其他需要的mrp软件或游戏;还有网站mrp123.com;www。nesnes。cn;www.
    5-----游戏列表更新文件最好不要下载;
    6-----浏览器,通讯工具,阅读工具,系统工具,播放器要下载几个;
    7-----在mrp123.cn下载应用管理器v。3.0,并安装到手机上;
    8-----此时mythroad文件夹里出现了app文件夹;
    9----下载已经有的文件外的另外几个文件,改成说明中要求的名字,转移到app文件夹;
    10---登陆www.mrp88.com,进入mrp游戏的更多;
    11----进入棋牌博彩的更多;
    12-----下载QQ游戏大厅-内置七款游戏内置7款游戏(斗地主、升级、中国象棋、麻将、五子棋、锄大地、拱猪)
        1.下载网游大厅文件放到mor_list13或mor_list17文件夹中,不然可能打开后白屏.
         2.在游戏列表中打开网游大厅后,选择需要更新的游戏即可;如果在手
    13------把网游大厅改名为aqqgame放入app文件夹;
    14-------其他游戏放入QQgame文件夹;
    15-------其余的自己捉么,网站上都有说明;
    16----利用*#220807#调用应用列表,直接进入;
    17----进入应用管理器,方可使用QQ2009视频版,QQ网游大厅等应用;
     
     
    18-----解除收费的方法:进入 信息--》短信--》短信设置--》模式设置--》模式一---》短信中心号码—》改掉就行了

    展开全文
  • 第一次写博客,与大家分享源代码,博客很多地方不...源代码下载地址:Android平台手机UI应用开发——软件管理器   功能: 在应用上分为:系统应用和用户应用 在界面上实现应用列表的两种视图:列表视图和网格视图
    
    

    第一次写博客,与大家分享源代码,博客很多地方不知道怎么设计,望见谅。

    希望大家多多支持,雅林和大家一起学习Android,共同进步。

    今天我们要做的这个软件管理器,主要目的是为了学习Android平台手机UI设计。

     

    源代码下载地址:Android平台手机UI应用开发——软件管理器

     

    功能:

    在应用上分为:系统应用用户应用

    在界面上实现应用列表的两种视图:列表视图网格视图

    在功能上实现应用的启动详细信息卸载功能。

    以及底部菜单的美化

     

    截图:

     

     

     

     

     

     

    项目目录:

     

    XML代码展示:

     layout目录文件

    about.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="@drawable/bg"
      android:orientation="vertical">
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:textSize="20px"
      	android:textStyle="bold"
      	android:textColor="#FFFFFF"
      	android:text="关于SoftManager说明"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="感谢您使用SoftManager,SoftManager是一个可以管理手机应用的一款绿色软件,使用户可以对自己手机软件有一个直观的了解。本应用提供两种视图方式(网格视图和列表视图),用户可以根据自己的需求随意调换。"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="功能列表:"
      	android:textSize="20px"
      	android:textStyle="bold"
      	android:textColor="#FFFFFF"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="①SoftManager可以执行手机应用程序"
      	android:textSize="16px"
      	android:textStyle="bold"
      	android:textColor="#FFFFFF"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="②SoftManager可以对查看应用相关信息(包括如下信息)"
      	android:textSize="16px"
      	android:textStyle="bold"
      	android:textColor="#FFFFFF"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="程序名称"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="程序包名"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="程序版本"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="程序版本号"/>
      <TextView
      	android:layout_width="fill_parent"
      	android:layout_height="wrap_content"
      	android:text="③SoftManager可以卸载手机应用"
      	android:textSize="16px"
      	android:textStyle="bold"
      	android:textColor="#FFFFFF"/>	
      	
    </LinearLayout>
    

     

    gridview_menu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
    	android:id="@+id/gvmenu" 
    	android:layout_width="fill_parent" 
    	android:layout_height="wrap_content"
    	android:layout_alignParentBottom="true"
    	android:stretchMode="columnWidth" 
    	android:numColumns="4"
    	android:listSelector="@drawable/menu_selectitem"
    	android:horizontalSpacing="12.0dip" 
    	android:verticalSpacing="8.0dip">
    </GridView>


    gridviewitem.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="90px"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      android:gravity="center_horizontal">
      <ImageView
      	android:id="@+id/gv_item_icon"
      	android:paddingTop="3px"
      	android:layout_width="55px"
      	android:layout_height="55px"/>
      <TextView
      	android:id="@+id/gv_item_appname"
      	android:layout_width="60px"
      	android:layout_height="wrap_content"
      	android:textSize="13px"
      	android:maxLines="1"
      	android:gravity="center"
      	android:textColor="#FFFFFF"
      	android:paddingBottom="3px"/>
    </LinearLayout>
    


    huanyingmian.xml

    <?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:background="@drawable/huanying">
    </LinearLayout>


    listviewitem.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:gravity="center_vertical">
      <ImageView
          android:id="@+id/lv_icon"
          android:layout_marginTop="5px"
          android:layout_marginBottom="5px"
          android:layout_width="48px"
          android:layout_height="48px"/>
      <LinearLayout 
          android:orientation="vertical"
          android:layout_marginLeft="5px"
          android:layout_width="wrap_content"
          android:layout_height="48px">
          <TextView 
              android:id="@+id/lv_item_appname"
              android:maxLines="1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textSize="16px"
              android:textColor="#ffffff"/>
          <TextView 
              android:id="@+id/lv_item_packagename"
              android:maxLines="1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textColor="#ffffff"/>
      </LinearLayout>
    </LinearLayout>
    


    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="@drawable/bg"
      android:id="@+id/mianxmllay"
      android:orientation="vertical">
      <RelativeLayout
      	android:layout_width="fill_parent"
      	android:layout_height="30px"
      	android:background="@drawable/top_bg">
      	<ImageView
     	android:id="@+id/top_icon"
      	android:layout_width="135px"
      	android:layout_height="30px"
      	android:src="@drawable/top_icon"/>
      </RelativeLayout>
      <LinearLayout
      	android:layout_height="wrap_content"
      	android:layout_width="fill_parent"
      	android:orientation="vertical">
      	<LinearLayout
      		android:layout_width="fill_parent"
      		android:layout_height="30px"
      		android:id="@+id/top_gg_lay"
      		android:background="@drawable/to_gg_bg">
      		<TextView
      			android:id="@+id/top_gg_text"
      			android:layout_width="wrap_content"
      			android:layout_height="30px"
      			android:textColor="#FF0000"
      			android:textSize="16px"
      			android:gravity="center_vertical"
      			android:text="官方公告:"/>
      		<TextView
      			android:id="@+id/top_text"
      			android:layout_width="wrap_content"
      			android:layout_height="30px"
      			android:gravity="center_vertical"
      			android:layout_toRightOf="@id/top_gg_text"
      			android:singleLine="true"
      			android:scrollHorizontally="true"
      			android:focusable="true"
      			android:ellipsize="marquee"
      			android:marqueeRepeatLimit="marquee_forever"
      			android:textColor="#000000"
      			android:text="欢迎使用软件管理器,我们一直为能更好的管理您的软件而努力。"/>	
      	</LinearLayout>
      	<RelativeLayout
    	  android:layout_width="fill_parent"
    	  android:layout_height="40px"
    	  android:background="#FFFFFF"
    	  android:layout_alignParentBottom="true"
    	  android:gravity="center_vertical|center_horizontal"
    	  android:id="@+id/qiehuan_relative">
    	  <ImageButton
    	  	android:id="@+id/ib_ch_view"
    	  	android:layout_alignParentLeft="true"
    	  	android:layout_marginLeft="5px"
    	  	android:background="@drawable/top_left_list"
    	  	android:layout_width="wrap_content"
    	  	android:layout_height="wrap_content"/>
    	  <ImageButton
    	  	android:id="@+id/btn_jiantou"
    	  	android:layout_height="30px"
    	  	android:layout_width="50px"
    	  	android:background="@drawable/jiantou"
    	  	android:layout_centerHorizontal="true"
    	  	/>	
    	  <ImageButton
    	  	android:id="@+id/ib_ch_categroy"
    	  	android:layout_alignParentRight="true"
    	  	android:layout_marginRight="5px"
    	  	android:background="@drawable/top_right_user"
    	  	android:layout_width="wrap_content"
    	  	android:layout_height="wrap_content"/>
    	</RelativeLayout>
    	<LinearLayout
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent">
    		<GridView
    	  	android:id="@+id/gridView"
    	  	android:layout_width="fill_parent"
    	  	android:layout_height="fill_parent"
    	  	android:numColumns="3"
    	  	android:horizontalSpacing="10px"
    	  	android:verticalSpacing="10px"
    	  	android:listSelector="@drawable/choose_gridview"
    	  	android:layout_marginRight="5px"
    	  	android:layout_marginTop="5px"
    	  	android:layout_marginLeft="5px"/>
    	  	<ListView
    	  	android:id="@+id/lv_apps"
    	  	android:layout_width="fill_parent"
    	  	android:layout_height="fill_parent"
    	  	android:listSelector="@drawable/choose_listview"
    	  	android:layout_marginLeft="5px"
    	  	android:layout_marginRight="5px"
    	  	android:layout_marginTop="5px"
    	  	android:visibility="gone"/>
    	</LinearLayout>
      </LinearLayout>		
    </LinearLayout>

     

    menu_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/RelativeLayout_Item"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:paddingTop="6.0dip"
      android:saveEnabled="false"
      android:orientation="vertical"
      android:gravity="center_horizontal">
      <ImageView
      	android:id="@+id/item_image"
      	android:layout_width="wrap_content"
      	android:layout_height="wrap_content"
      />
      <TextView 
      	android:id="@+id/item_text" 
      	android:layout_width="wrap_content"
    	android:layout_height="wrap_content" 
    	android:layout_marginTop="7.0dip"
    	android:textColor="#42556B"
       />
    </LinearLayout>
    


    topmenu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="40px"
      android:background="#FFFFFF"
      android:gravity="center_vertical">
      <ImageButton
      	android:id="@+id/ib_ch_view"
      	android:layout_alignParentLeft="true"
      	android:layout_marginLeft="5px"
      	android:background="@drawable/top_left_list"
      	android:layout_width="wrap_content"
      	android:layout_height="wrap_content"
      	/>
    	
      <ImageButton
      	android:id="@+id/ib_ch_categroy"
      	android:layout_alignParentRight="true"
      	android:layout_marginRight="5px"
      	android:background="@drawable/top_right_user"
      	android:layout_width="wrap_content"
      	android:layout_height="wrap_content"/>
    </RelativeLayout>
    


    values目录文件

    arrays.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    	<array name="choice">
    		<item name="start">启动程序</item>
    		<item name="detail">详细信息</item>
    		<item name="uninstall">卸载程序</item>
    	</array>
    </resources>
    


    colors.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="discuss_blue">#295782</color>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="discuss_writer">#778190</color>
    <color name="gray">#ff888888</color>
    <color name="photo_preview_select_album_layout_bg">#ff3a3a3a</color>
    </resources>


    strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, MainViewActivity!</string>
        <string name="app_name">软件管理器</string>
    </resources>
    


    styles.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="menuTextStyle" parent="@android:style/TextAppearance.Small">
            <item name="android:textSize">12.0sp</item>
            <item name="android:textColor">@color/menu_text_color</item>
        </style>
        <style name="menushow">
            <item name="android:windowEnterAnimation">@anim/menu_in</item>
            <item name="android:windowExitAnimation">@anim/menu_out</item>
        </style>
    </resources>
    

     

    anim目录文件

    menu_in.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <set android:interpolator="@android:anim/decelerate_interpolator"
      xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:duration="@android:integer/config_shortAnimTime" android:fromYDelta="25.0%" android:toYDelta="0.0" />
        <alpha android:duration="@android:integer/config_shortAnimTime" android:fromAlpha="0.0" android:toAlpha="1.0" />
    </set>


    menu_out.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <set android:interpolator="@android:anim/accelerate_interpolator"
      xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:duration="@android:integer/config_shortAnimTime" android:fromYDelta="0.0" android:toYDelta="50.0%" />
        <alpha android:duration="@android:integer/config_shortAnimTime" android:fromAlpha="1.0" android:toAlpha="0.0" />
    </set>


    color目录文件

    menu_text_color.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <selector
      xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:color="#ff031e3a" />
        <item android:state_enabled="false" android:color="#ff778797" />
    </selector>



    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.feioh"
          android:versionCode="1"
          android:versionName="1.0">
        <uses-sdk android:minSdkVersion="8" />
    
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".HuanyingActivity"
                      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 android:name=".MainViewActivty"/>
            <activity android:name=".About"/>
    
        </application>
    </manifest>


    JAVA代码展示

    com.feioh包

    About.java

    package com.feioh;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    /**
     * 关于软件
     * @author yalin
     *
     */
    public class About extends Activity {
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		//让title不显示
    		requestWindowFeature(Window.FEATURE_NO_TITLE);
    		//全屏显示
    		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    				WindowManager.LayoutParams.FLAG_FULLSCREEN);
    		setContentView(R.layout.about);
    	}
    }
    


    GridViewAdapter.java

    package com.feioh;
    
    import java.util.List;
    
    import android.content.Context;
    import android.content.pm.PackageInfo;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    /**
     * GridViewAdapter 软件管理GridView视图的自定义Adapter
     * @author 雅林
     *
     */
    public class GridViewAdapter extends BaseAdapter {
    	private List<PackageInfo> packageInfos=null;
    	private LayoutInflater inflater=null;
    	private Context context=null;
    	
    	//构造函数,接收数据
    	public GridViewAdapter(List<PackageInfo> packageInfos,Context context)
    	{
    		this.packageInfos=packageInfos;
    		this.context=context;
    		//新方法,inflater对象的作用是将xml文件转换成视图
    		inflater=LayoutInflater.from(context);
    	}
    	
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return packageInfos.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return packageInfos.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
    		convertView =inflater.inflate(R.layout.gridviewitem,null);
    		TextView tv=(TextView) convertView.findViewById(R.id.gv_item_appname);
    		ImageView iv=(ImageView) convertView.findViewById(R.id.gv_item_icon);
    		
    		//得到软件的名称并设置
    		tv.setText(packageInfos.get(position).applicationInfo.loadLabel(context.getPackageManager()));
    		//得到软件的图标并设置
    		iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(context.getPackageManager()));
    		return convertView;
    	}
    
    }
    


    HuanyingActivity.java

    package com.feioh;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    
    /**
     * 欢迎界面
     * @author yalin
     *
     */
    public class HuanyingActivity extends Activity implements Runnable{
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    	 //让title不显示
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //全屏显示
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        		WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        setContentView(R.layout.huanyingmian);
        
        //在每一个Activity的onCreate方法中添加Activity到MyApplication对象实例容器中
        MyApplication.getInstance().addActivity(this);
        
        //新开辟一个线程
        Thread thread=new Thread(this);
    	thread.start();
    	}
    
    	@Override
    	public void run() {
    		//线程休息两秒秒钟
    		try{
    			Thread.sleep(3000);
    		}catch (Exception e) {
    			e.printStackTrace();
    		}
    		//跳转到程序页面
    		Intent intent=new Intent(HuanyingActivity.this,MainViewActivty.class);
    		startActivity(intent);
    		//此Activity不在起作用
    		finish();
    	}
    	
    	
    }
    


    ListViewAdapter.java

    package com.feioh;
    
    import java.util.List;
    
    import android.content.Context;
    import android.content.pm.PackageInfo;
    import android.graphics.Typeface;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    /**
     * ListViewAdapter 软件管理ListView视图的自定义Adapter
     * @author 雅林
     *
     */
    public class ListViewAdapter extends BaseAdapter {
    	private List<PackageInfo> packageInfos=null;
    	private Context context=null;
    	private LayoutInflater inflater=null;
    	
    	//构造方法
    	public ListViewAdapter(List<PackageInfo> packageInfos,Context context)
    	{
    		this.packageInfos=packageInfos;
    		this.context=context;
    		//新方法,inflater对象的作用是将xml文件转换成视图
    		inflater=LayoutInflater.from(context);
    	}
    	
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return packageInfos.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return packageInfos.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
    		convertView =inflater.inflate(R.layout.listviewitem,null);
    		
    		ImageView iv=(ImageView) convertView.findViewById(R.id.lv_icon);
    		TextView tv1=(TextView) convertView.findViewById(R.id.lv_item_appname);
    		//加粗
    		tv1.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
    		
    		TextView tv2=(TextView) convertView.findViewById(R.id.lv_item_packagename);
    		
    		//得到软件的图标并设置
    		iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(context.getPackageManager()));
    		//得到软件的名称并设置
    		tv1.setText(packageInfos.get(position).applicationInfo.loadLabel(context.getPackageManager()));
    		//得到软件的全包名并设置
    		tv2.setText(packageInfos.get(position).packageName);
    		return convertView;
    	}
    
    }
    


    MainViewActivity.java

    package com.feioh;
    
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.R.color;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.ProgressDialog;
    import android.content.ComponentName;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.Gravity;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup.LayoutParams;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.GridView;
    import android.widget.ImageButton;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.PopupWindow;
    import android.widget.RelativeLayout;
    import android.widget.Toast;
    
    public class MainViewActivty extends Activity implements Runnable {
        private GridView gridView=null;
        private ListView listView=null;
        
        private List<PackageInfo> packageInfos=null;//用来去的系统中的所有包的信息
        private List<PackageInfo> userPackageInfos=null;//用户自己安装的程序
        private List<PackageInfo> showPackageInfos=null;//当前显示的安装程序
        
        private ImageButton changeViewBtn=null;//切换List 和 Grid视图
        private ImageButton changeCategoryBtn=null;//切换用户应用和切换系统应用按钮
        
        private boolean isUserApp=true;//用来实现系统应用与自己应用的切换
        private boolean isListView=true;//用来listview,gridview的切换
        
        private final int SEARCH_APP=0;//线程请求
        private ProgressDialog dialog=null;//进度条对话框
    	
    	private int selTitle=0;//底部菜单标题选项ID
    	
    	private PopupWindow popup;//定义popupwindow
    	private MenuAdapter menuAdapter;//定义菜单GridView适配器
    	private List<MenuInfo> menulists;//菜单项列表
    	private GridView menuGridView;//定义菜单GridView
        
    	private boolean isJt=true;//控制小箭头
    	private ImageButton btn=null;//定义小箭头图标
        
        private Handler handler=new Handler(){
        	//当消息发送过来的时候会执行下面这个方法
        	public void handleMessage(android.os.Message msg){
        		super.handleMessage(msg);
        		if(msg.what==SEARCH_APP){
        			showPackageInfos = packageInfos;
        		gridView.setAdapter(new GridViewAdapter(showPackageInfos, 
        				MainViewActivty.this));
        		listView.setAdapter(new ListViewAdapter(showPackageInfos,
        				MainViewActivty.this));
        		dialog.dismiss();//让dialog消失
        		}
        	};
        };
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //让title不显示
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            //全屏显示
    //        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    //        		WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.main);
            
            //得到小箭头,点击小箭头
            btn=(ImageButton) findViewById(R.id.btn_jiantou);
            btn.setOnClickListener(new OnClickListener() {
            	//得到广告视图
    			LinearLayout linear=(LinearLayout) findViewById(R.id.top_gg_lay);
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				if(isJt)
    				{
    					linear.setVisibility(View.GONE);
    					btn.setBackgroundResource(R.drawable.jiantouxia);
    					isJt=false;
    					
    				}else
    				{
    					linear.setVisibility(View.VISIBLE);
    					btn.setBackgroundResource(R.drawable.jiantou);
    					isJt=true;
    				}
    			}
    		});
            
            
            
            //初始化底部菜单
            initPopuWindows();
            
            //分别得到listView和gridView视图
            listView=(ListView) findViewById(R.id.lv_apps);
            gridView=(GridView) findViewById(R.id.gridView);
            
            //显示dialog,正在搜索。。。
            dialog = ProgressDialog.show(this, "Waiting please ....", "正在搜索所安装的应用程序",true,false);
            
            //得到切换视图按钮
            changeViewBtn=(ImageButton) findViewById(R.id.ib_ch_view);
            changeViewBtn.setOnClickListener(topClick);
            //得到切换程序按钮
            changeCategoryBtn=(ImageButton) findViewById(R.id.ib_ch_categroy);
            changeCategoryBtn.setOnClickListener(topClick);
            
            
    		gridView.setOnItemClickListener(listener);
    		listView.setOnItemClickListener(listener);
    		
    		//开辟一个线程
    		Thread thread=new Thread(this);
    		thread.start();
    		
    		//在每一个Activity的onCreate方法中添加Activity到MyApplication对象实例容器中
    	    MyApplication.getInstance().addActivity(this);
        }
        
        //应用程序执行事件
        OnItemClickListener listener=new OnItemClickListener() {
        	@Override
        	public void onItemClick(AdapterView<?> parent, View view, int position,
        			long id) {
        		//通过positon取出对应的packageInfo
        		final PackageInfo packageInfo=showPackageInfos.get(position);
        		//创建一个Dialog用来进行选择
        		AlertDialog.Builder builder=
        				new AlertDialog.Builder(MainViewActivty.this);
        		builder.setTitle("选项");
        		//接受一个资源的ID
        		builder.setItems(R.array.choice,new DialogInterface.OnClickListener() {
    						@Override
    						public void onClick(DialogInterface dialog, int which) {
    							// 这里面用来写单击对话框各项时候的事件处理
    							switch (which) {
    							case 0:
    								String packageName=packageInfo.packageName;
    								ActivityInfo activityInfo=
    										packageInfo.activities[0];
    								if(activityInfo==null){
    									Toast.makeText(MainViewActivty.this
    											, "没有任何activity", 
    											Toast.LENGTH_SHORT).show();
    									return;
    								}
    								String activityName=activityInfo.name;
    								Intent intent=new Intent();
    								//通过报名和类名来启动应用程序
    								intent.setComponent(new ComponentName(packageName,activityName));
    								startActivity(intent);
    								break;
    							case 1:
    								Builder builder=new Builder(MainViewActivty.this);
    								builder.setTitle("详细信息");
    								builder.setIcon(packageInfo.activities[0].icon);
    								builder.setPositiveButton("确定", null);
    								builder.setMessage("程序名称:"+packageInfo.activities[0].name+"\n"+
    								"包名:"+packageInfo.packageName+"\n"+"版本号:"+packageInfo.versionCode
    								+"\n"+"版本名:"+packageInfo.versionName);
    								builder.show();
    								break;
    							case 2:
    								Uri packageUri=Uri.parse("package:"+packageInfo.packageName);
    								Intent deleteIntent=new Intent();
    								deleteIntent.setAction(Intent.ACTION_DELETE);
    								deleteIntent.setData(packageUri);
    								//这句话是为了解决删除完应用后,程序图标仍然存在的bug
    								startActivityForResult(deleteIntent, 0);
    								break;
    							}
    						}
    					});
        		//此处设为null,即默认就实现了关闭功能
        		builder.setNegativeButton("取消", null);
        		builder.create().show();
        	}
    	};
        
    	
    	//头部菜单点击事件
    	OnClickListener topClick=new OnClickListener() {
    		@Override
    		public void onClick(View v) {
    			// TODO Auto-generated method stub
    			//如果点击的是 头部菜单左边按钮
    			if(v.getId()==R.id.ib_ch_view)
    			{
    				//让GridView 消失,让ListView显示
    				if(isListView==true){
    					listView.setVisibility(View.VISIBLE);
    					gridView.setVisibility(View.GONE);
    					isListView=false;
    					
    					v.setBackgroundResource(R.drawable.top_left_grid);
    				}else{
    				//让ListView消失,让GridView显示	
    					listView.setVisibility(View.GONE);
    					gridView.setVisibility(View.VISIBLE);
    					isListView=true;
    					v.setBackgroundResource(R.drawable.top_left_list);
    				}
    			}
    			//如果点击的头部菜单是  右边按钮
    			if(v.getId()==R.id.ib_ch_categroy)
    			{
    				//把用户应用 作为要显示的应用
    				if(isUserApp){
    					v.setBackgroundResource(R.drawable.top_right_all);
    					showPackageInfos=userPackageInfos;
    					isUserApp=false;
    				}
    				else{
    				//把系统应用作为要显示的应用	
    					v.setBackgroundResource(R.drawable.top_right_user);
    					showPackageInfos=packageInfos;
    					isUserApp=true;
    				}
    				//为listView和gridView设置适配器
    				gridView.setAdapter(new GridViewAdapter(showPackageInfos,MainViewActivty.this));
    	    		listView.setAdapter(new ListViewAdapter(showPackageInfos,MainViewActivty.this));
    			}
    		}
    	};
        
    	//重写菜单按钮时  必须要重写的方法
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {// 创建MENU
    		menu.add("menu");// 必须创建一项
    		return super.onCreateOptionsMenu(menu);
    	}
    	//重写菜单按钮
    	@Override
    	public boolean onMenuOpened(int featureId, Menu menu) {
    		// TODO Auto-generated method stub
    		if (popup != null) {
    			//得到所有菜单项列表
       			menulists = MenuUtils.getMenuList();
       			//为适配器设置数据(list<MenuInfo>)
       			menuAdapter = new MenuAdapter(this, menulists);
       			//为GridView填充数据
       			menuGridView.setAdapter(menuAdapter);
       			//显示popup
       			popup.showAtLocation(this.findViewById(R.id.mianxmllay), Gravity.BOTTOM, 0, 0);
       		}
    		return false;
    	}
    	
    	 //这个新开辟的线程 主要用来获取系统应用所有包 和 用户应用所有包
        @Override
        public void run() {
        	System.out.println(Thread.currentThread().getName());
        	//获得系统中所有包
        	packageInfos=getPackageManager().getInstalledPackages(
        			PackageManager.GET_UNINSTALLED_PACKAGES|PackageManager.GET_ACTIVITIES);
        	//实例化用户自己安装的程序
        	userPackageInfos=new ArrayList<PackageInfo>();
        	for (PackageInfo temp:packageInfos) {
    			boolean flag=false;
    			ApplicationInfo appInfo=temp.applicationInfo;
    			if((appInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)!=0){
    				//更新过的系统应用程序
    				flag=true;
    			}else if((appInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){
    				//用户自己的应用程序
    				flag=true;
    			}
    			if(flag){
    				userPackageInfos.add(temp);
    			}
    		}
        	//发送一个信息给主线程,让主线程把progressDialog给取消掉
        	handler.sendEmptyMessage(SEARCH_APP);
        }
    	
        //设置PopupWindows
        private void initPopuWindows()
        {
        	//初始化GridView
        	menuGridView=(GridView) View.inflate(this,R.layout.gridview_menu,null);
        	//初始化PopupWindow,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT控制显示
        	popup=new PopupWindow(menuGridView,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
        	// 设置menu菜单背景
        	popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_background));
        	// menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应
        	popup.setFocusable(true);
        	//设置显示和隐藏的动画
        	popup.setAnimationStyle(R.style.menushow);
        	popup.update();
        	//设置触摸获取焦点
        	menuGridView.setFocusableInTouchMode(true);
        	//设置键盘事件,如果按下菜单键则隐藏菜单
        	menuGridView.setOnKeyListener(new android.view.View.OnKeyListener() {
        	public boolean onKey(View v, int keyCode, KeyEvent event) {
        		if ((keyCode == KeyEvent.KEYCODE_MENU) && (popup.isShowing())) {
        			popup.dismiss();  
        				return true;
        		}else{
        			return false;
        		}
        	}
    
        	});
        	//添加菜单按钮事件
        	menuGridView.setOnItemClickListener(new OnItemClickListener() {
        		public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
        			// TODO Auto-generated method stub
        			MenuInfo mInfo = menulists.get(position);
        			popup.dismiss();
        			if (mInfo.ishide) {
        				return;
        			}
        			switch (mInfo.menuId) {
        			case MenuUtils.MENU_LIEBIAO:
        				//以List列表显示
        				listView.setVisibility(View.VISIBLE);
        				gridView.setVisibility(View.GONE);
        				isListView=false;
        				break;
        			case MenuUtils.MENU_WANGGE:
        				//以网格列表显示
        				listView.setVisibility(View.GONE);
        				gridView.setVisibility(View.VISIBLE);
        				isListView=true;
        				break;
        			case MenuUtils.MENU_USERAPP:
        				//显示用户应用
        				showPackageInfos=userPackageInfos;
        				isUserApp=false;
        				//为listView和gridView设置适配器
        				gridView.setAdapter(new GridViewAdapter(showPackageInfos,MainViewActivty.this));
        	    		listView.setAdapter(new ListViewAdapter(showPackageInfos,MainViewActivty.this));
        				break;
        			case MenuUtils.MENU_SYSAPP:
        				//显示系统应用
        				showPackageInfos=packageInfos;
        				isUserApp=true;
        				//为listView和gridView设置适配器
        				gridView.setAdapter(new GridViewAdapter(showPackageInfos,MainViewActivty.this));
        	    		listView.setAdapter(new ListViewAdapter(showPackageInfos,MainViewActivty.this));
       					break;
      				case MenuUtils.MENU_SOFTSM:
      					//跳转程序说明Activity
      					Intent intent=new Intent(MainViewActivty.this,About.class);
      					startActivity(intent);
       					break;
        			case MenuUtils.MENU_APPADD:
        				//关于添加软件
        				AlertDialog.Builder alertBuilderadd=new Builder(MainViewActivty.this);
        				alertBuilderadd.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("功能尚未开发^_^");
        				alertBuilderadd.setPositiveButton("返回",new DialogInterface.OnClickListener() {
        					@Override
        					public void onClick(DialogInterface dialog, int which) {
        						// TODO Auto-generated method stub
        						dialog.cancel();
        					}
        				}).create();
        				alertBuilderadd.show();
        				break;
        			case MenuUtils.MENU_APPSOSO:
        				//软件搜索
        				AlertDialog.Builder alertBuildersoso=new Builder(MainViewActivty.this);
        				alertBuildersoso.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("功能尚未开发^_^");
        				alertBuildersoso.setPositiveButton("返回",new DialogInterface.OnClickListener() {
        					@Override
        					public void onClick(DialogInterface dialog, int which) {
        						// TODO Auto-generated method stub
        						dialog.cancel();
        					}
        				}).create();
        				alertBuildersoso.show();
        				break;
        			case MenuUtils.MENU_LOGOUT:
        				//退出程序
        				AlertDialog.Builder alertbBuilder = new AlertDialog.Builder(MainViewActivty.this);   
        		        alertbBuilder.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("你确定要离开吗?");   
        		        alertbBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {   
        		        @Override  
        			          public void onClick(DialogInterface dialog, int which) {
        		        	  //在需要结束所有Activity的时候调用exit方法
        		          	  MyApplication.getInstance().exit();
        			          }   
        		          });   
        		          alertbBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {   
        		               @Override  
        		               public void onClick(DialogInterface dialog, int which) {   
        		               dialog.cancel();   
        		               }   
        		          }).create();   
        		          alertbBuilder.show();
        				break;
        			}
        		}
        	});
        }
    		
    }


    MenuAdapter.java

    package com.feioh;
    
    import java.util.List;
    
    import javax.crypto.spec.PSource;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    /**
     * 
     * @author yalin
     * 底部菜单 适配器,返回的是 GridView的每一项
     *
     */
    public class MenuAdapter extends BaseAdapter {
    	
    	private final List<MenuInfo> list;
    	private final LayoutInflater inflater;
    	
    	public MenuAdapter(Context context,List<MenuInfo> list)
    	{
    		this.list=list;
    		inflater=LayoutInflater.from(context);
    	}
    
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return list.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return 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)
    		{	
    			//得到每一项 视图
    			convertView=inflater.inflate(R.layout.menu_item,null);
    		}
    		MenuInfo menuinfo=list.get(position);
    		
    		//得到每一项的视图
    		ImageView iv=(ImageView) convertView.findViewById(R.id.item_image);
    		TextView tv=(TextView) convertView.findViewById(R.id.item_text);
    		
    		//为每一项 设置图片和文字 信息
    		iv.setImageResource(menuinfo.imgsrc);
    		tv.setText(menuinfo.title);
    		
    		if(menuinfo.ishide)
    		{
    			iv.setAlpha(80);
    		}
    		return convertView;
    	}
    
    }
    


    MenuInfo.java

    package com.feioh;
    
    
    public class MenuInfo {
    	
    	public String title;//标题
    	public int imgsrc;//图片资源
    	public boolean ishide;//是否隐藏
    	public int menuId;//menuId
    	
    	public MenuInfo(int menuId, String title,int imgsrc,Boolean ishide)
    	{
    		this.menuId=menuId;
    		this.title=title;
    		this.imgsrc=imgsrc;
    		this.ishide=ishide;
    	} 
    }
    


    MenuUtils.java

    package com.feioh;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class MenuUtils {
    	public static final int MENU_LIEBIAO=1;
    	public static final int MENU_WANGGE=2;
    	public static final int MENU_USERAPP=3;
    	public static final int MENU_SYSAPP=4;
    	public static final int MENU_APPADD=5;
    	public static final int MENU_APPSOSO=6;
    	public static final int MENU_SOFTSM=7;
    	public static final int MENU_LOGOUT=8;
    	
    	/**
    	 * 获取当前菜单列表
    	 * @return
    	 */
    	public static List<MenuInfo> getMenuList(){
    		List<MenuInfo> list=new ArrayList<MenuInfo>();
    			list.add(new MenuInfo(MENU_LIEBIAO,"列表视图",R.drawable.menu_ic_setting,false));
    			list.add(new MenuInfo(MENU_WANGGE,"网格视图",R.drawable.menu_ic_logout,false));
    			list.add(new MenuInfo(MENU_USERAPP,"用户应用",R.drawable.menu_ic_help,false));
    			list.add(new MenuInfo(MENU_SYSAPP,"系统应用",R.drawable.menu_ic_exit,false));
    			list.add(new MenuInfo(MENU_APPADD,"应用添加",R.drawable.menu_ic_search_friend,false));
    			list.add(new MenuInfo(MENU_APPSOSO,"应用搜索",R.drawable.menu_ic_addgroup,false));
    			list.add(new MenuInfo(MENU_SOFTSM,"系统说明",R.drawable.menu_ic_addfriend,false));
    			list.add(new MenuInfo(MENU_LOGOUT,"退出系统",R.drawable.menu_ic_search_friend,false));
    		return list;
    	}
    	
    }
    


    MyApplication.java

    package com.feioh;
    
    import java.util.LinkedList;
    import java.util.List;
    
    import android.app.Activity;
    import android.app.Application;
    
    /**
    * 在每一个Activity的onCreate方法中添加Activity到MyApplication对象实例容器中
    * MyApplication.getInstance().addActivity(this);
    * 在需要结束所有Activity的时候调用exit方法
    * MyApplication.getInstance().exit();
    * */
    public class MyApplication extends Application {
    	private List<Activity> activityList=new LinkedList<Activity>();
    	
    	private static MyApplication instance;
    	private MyApplication(){}
    	
    	//单例模式中 获取唯一的MyApplication实例
    	public static MyApplication getInstance()
    	{
    		if(instance==null)
    		{
    			instance=new MyApplication();
    		}
    		return instance;
    	}
    	//添加Activity到容器中
    	public void addActivity(Activity activity)
    	{
    		activityList.add(activity);
    	}
    	
    	//遍历所有Activity,并finish
    	public void exit()
    	{
    		for(Activity activity:activityList)
    		{
    			activity.finish();
    		}
    		System.exit(0);
    	}
    }
    


     

    源代码下载地址:Android平台手机UI应用开发——软件管理器




     

    展开全文
  • 讲述如何在Android系统上开发一个手机应用管理软件
  • 这是一个简单轻便的Apk管理软件,它可以为您扫描出SD卡中的所有apk以及手机里已安装的应用(内置应用除外)。通过它您可以删除/卸载不需要的Apk/应用来释放空间,也可以通过它来安装各种安卓应用。动一动手指,开始整理...
  • 之前几篇文章我们介绍了如何去获取手机应用程序列表,已经实现对应用程序的一些操作:运行、卸载、分享。这个三个功能相对是比较简单,对于如何实现对一个应用程序加锁,这个相对复杂一点。在一些情况下,我们想对一...

    之前几篇文章我们介绍了如何去获取手机应用程序列表,已经实现对应用程序的一些操作:运行、卸载、分享。这个三个功能相对是比较简单,对于如何实现对一个应用程序加锁,这个相对复杂一点。在一些情况下,我们想对一个软件加锁,来保护我们的隐私或者增加安全,比如支付宝、银行软件,这些软件加锁都是有必要。前一段时间一直忙于项目,没对博客进行跟进,今天我们将介绍一下如何实现软件加锁。大家先看看实现的效果图(我们以加锁UC为例):

              UC之前显示没有加锁状态                                                     选择加锁UC                                                          运行UC显示验证页面

           

    一、实现流程:

    首先我们将要加锁的应用程序放到数据库中,然后开启一个服务监听栈顶应用程序,将当前栈顶应用程序与数据库加密应用程序进行匹配,匹配成功,则弹出身份验证页面。

    我们需要注意的是身份验证通过之后,不能重复出现验证密码页面,这个需要一些逻辑上的判断。

    将要加锁的应用程序存放到数据库中:

    String itemPackageName = item.getPackageName();
    			String pwd = preferencesPwd.getString("pwd", "");
    			if(tv_app_lock.getText().equals("加锁")){
    				if(TextUtils.isEmpty(pwd)){
    					setPassWord(itemPackageName);
    				}else{
    					handleDB.add(itemPackageName);
    					Toast.makeText(MainActivity.this, "加锁成功", Toast.LENGTH_SHORT).show();
    				}
    			}else if(tv_app_lock.getText().equals("解锁")){
    				unLock(itemPackageName);
    			}
    			
    			adapter.notifyDataSetChanged();


    开启服务,用于监听栈顶:

     // 得到当前运行的任务栈,参数就是得到多少个任务栈,1就是只拿一个任务栈  
    	                    // 对应的也就是正在运行的任务栈啦 ,注意别忘了在清单文件中添加获取的权限
    						List<RunningTaskInfo> runTaskInfos = 
    								activityManager.getRunningTasks(1);
    						//拿到当前运行的任务栈 
    						RunningTaskInfo runningTaskInfo = runTaskInfos.get(0);
    						//拿到要运行的Activity的包名
    						String runningpackageName = runningTaskInfo.topActivity.getPackageName();
    						//判断监听的运行包是否加锁
    						if(handleDB.find(runningpackageName)){
    							runningApp = runningpackageName;
    							//解决反复出现验证页面BUG:
    							//如果runningApp.equals(lastRunningApp)=true
    							//则说明当前栈顶运行的程序已经解锁了
    							if((runningApp.equals(lastRunningApp)) == false){
    								intentLockAppActivity.putExtra("packageName", runningpackageName);
    								intentLockAppActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    								startActivity(intentLockAppActivity);
    							}
    						}


    监听到要加锁的程序,弹出验证页面:

    String input = etInputPwd.getText().toString().trim();
    		preferences = getSharedPreferences("passWord", MODE_PRIVATE);
    		passWord = preferences.getString("pwd", "");
            if(TextUtils.isEmpty(input))  
            {  
                Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();  
            }  
            else if(passWord.equals(input))  
            { 
            	WatchAppService.lastRunningApp = WatchAppService.runningApp;//这里赋值,终于解决了反复弹出验证页面的BUG
                finish();  
            }  
            else  
            {  
                Toast.makeText(this, "密码错误", Toast.LENGTH_SHORT).show();
                etInputPwd.setText("");//置空
            }  


    弹出自定义软键盘:

    @Override
    	public boolean onTouch(View v, MotionEvent event) {
    		// TODO Auto-generated method stub
    		//这样是在触摸到控件时,软键盘才会显示出来
    		int inputback = etInputPwd.getInputType();  
    		etInputPwd.setInputType(InputType.TYPE_NULL);  
            new KeyboardUtil(this, this, etInputPwd).showKeyboard();  
            etInputPwd.setInputType(inputback); 
    		return false;
    	}
    自定义软件盘的实现这里将不再细说,具体请参考先前文章http://blog.csdn.net/acrambler/article/details/13020057

    第一次进行加锁,会要求先设置密码:

    //设置密码
        public void setPassWord(final String itemPackageName){
        	 new AlertDialog.Builder(this).setTitle("设置安全锁密钥").setIcon(R.drawable.ic_setting_pwd)
        	.setView(viewSetPwd)
        	.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				if((etPwd1.getText().toString()).equals(etPwd2.getText().toString())){
    					if(TextUtils.isEmpty(etPwd1.getText().toString()) | TextUtils.isEmpty(etPwd2.getText().toString())){
    						Toast.makeText(MainActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();
    						boolean isVisible = false;
    						dialogView(dialog,isVisible);
    					}else{
    						editor.putString("pwd", etPwd1.getText().toString());
    						editor.commit();
    						handleDB.add(itemPackageName);
    						Toast.makeText(MainActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
    						Toast.makeText(MainActivity.this, "加锁成功", Toast.LENGTH_SHORT).show();
    						boolean isVisible = true;
    						dialogView(dialog,isVisible);
    					}
    				}else{
    					etPwd1.setText("");
    					etPwd2.setText("");
    					Toast.makeText(MainActivity.this, "两次密码不相同", Toast.LENGTH_SHORT).show();
    					boolean isVisible = false;
    					dialogView(dialog,isVisible);
    				}
    			}
    		})
    		.setNeutralButton("重置", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				etPwd1.setText("");
    				etPwd2.setText("");
    				boolean isVisible = false;
    				dialogView(dialog,isVisible);
    			}
    		})
    		.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				boolean isVisible = true;
    				dialogView(dialog,isVisible);
    			}
    		} )
    		.create().show();
        	 }


    我们设置了长按进行重新设置密码:

    @Override
        public boolean onLongClick(View v) {
        	// TODO Auto-generated method stub
        	switch (v.getId()) {
    		case R.id.ll_app_lock:
    			String stringPwd = preferencesPwd.getString("pwd", "");
    			if(TextUtils.isEmpty(stringPwd)){
    				//没有首次设置密码,长按无效
    			}else{
    				changePwd();
    			}
    			break;
    		default:
    			break;
    		}
        	return true;
        }  


    在清单文件里面别忘了添加:

    <activity android:name="com.xh.ui.LockAppActivity"
                android:excludeFromRecents="true"
                android:theme="@style/AppThemeBlack">
            </activity>
            <!-- android:persistent="true" 将服务设置为系统服务,防止被系统意外回收-->
            <service 
                android:persistent="true"
                
                android:name="com.xh.service.WatchAppService"/>


    上面就是主要代码,现在我们发现其实实现起来也是很简单的。


    由于这次代码比较多,我就不全部贴出来了,我把链接发给大家,可以下载源码。

    总结:到此这个手机应用管理器就做完了,当然了还有很多bug存在,一些逻辑考虑的还不够完整,这个大家可以运行看看,欢迎一起交流。对于附带的资源下载,本人都是运行后没有问题才上传的,如果你无法运行,一般都是配置问题,有问题可以在评论中交流,在资源处评论,无法和大家进行交流。欢迎大家继续关注……


    【android开发】手机应用管理器的实现(完整版)

    展开全文
  • 应用管理(类似360手机管理) 两种视图界面,可以学习怎样调用系统,对安装软件进行操作
  • (六) OBEX应用——文件传输...在手机数据传输方面基本OBEX应用分为 l 文件传输 l IrMC同步 文件传输又可以细分为以下基本操作 l 初始化连接 l 断开连接 l 设置路径 l 取得目录信息 l 创建目录 l 上传下载...
     

    (六)  OBEX应用——文件传输部分<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    在手机数据传输方面基本OBEX应用分为

    l         文件传输

    l         IrMC同步

    文件传输又可以细分为以下基本操作

    l         初始化连接

    l         断开连接

    l         设置路径

    l         取得目录信息

    l         创建目录

    l         上传下载文件

    l         删除文件或空目录

    在笔者的软件当中设计了OBEX这个类,里面包含了以上所有的基本操作。另外针对M55的服务端的特殊性又设计了更名、取得磁盘空间信息、移动、拷贝文件的功能。具体请参考源代码。

    下面具体讲述各个操作的细节。

    l         初始化连接

    初始化连接包括了使手机进入OBEX状态再到发送Connect指令的一系列过程。具体流程参考下图。

    ATÆAT^SQWE=0ÆAT^SQWE=3ÆConnectÆ连接到Folder-Listing Service

    其中AT^SQWE=0AT^SQWE=3是西门子特有的隐藏的AT指令,甚至在官方的AT指令集里面都没有提到。其作用是初始化手机到OBEX模式。

    发送Connect指令收到手机回复以后确定Max Packet Length等参数。最后连接到Folder-Listing Service进行文件操作。如果需要IrMC同步的话,在Connect后直接连接到IrMC Sync Service即可,手机立刻进入同步模式,所有的应用程序退出。

    在笔者的程序中当中首先使用AT指令确定手机当前的工作,如果超时,尝试发送+++并等待1秒钟以便手机从不正常的OBEX状态中退出。然后在此发送AT,成功后即进行文件操作,否则引发一个错误。

    l         断开连接

    这里的断开连接是指从OBEX模式退出到AT状态中。在AT指令中,连续发送三个0x2B然后等待一秒钟以上即可退出数据模式进入常规AT模式。

    l         设置路径

    程序中使用SetPath操作设置路径。需要注意的是,可以设计两种风格的过程:一种使用绝对路径,另一种使用相对路径。

    对于手机而言,经笔者实践证明,使用绝对路径要比使用相对路径方便,而且更准确,但效率上稍逊,特别是在多层目录的情况下。由于手机没有能够返回当前路径的方法,所以相对路径总难以控制,只有通过程序控制,极容易出现错误。所以建议使用绝对路径。

    如果使用绝对路径,那么路径名将呈现\path1\path2这种形式。首先回到根目录,然后一级一级的到达目的。在笔者的OBEX类当中,可以看到BacktoRoot这个过程。其作用就是把当前程序路径切换到根目录以免引起混乱。

    l         取得目录信息

    要取得一个目录的文件信息可以用发送Get指令。该Get指令需要一个TypeHeader,其值为x-obex/folder-listing

    随后服务端会返回一个xml文件,包含了整个目录的信息。例如子目录名、文件名、大小、最后修改时间。再通过xml解析后就会得到目录信息。

    l         创建目录

    SetPathFlagsBit1设为1并且无法找到目录时,服务端会创建这个目录并进入。

    请注意,再次使用SetPath并将FlagsBit0设为1返回上层目录,否则容易引起混乱。

    l         上传下载文件

    使用PutGet命令可以实现上传和下载文件。注意所有的文件操作都在SetPath所指定的目录下进行。

    使用Put命令实现上传时,至少需要提供NameHeaderBodyHeader,一般还要提供LengthHeaderDateTimeHeader。大文件传输需要正确处理BodyHeader,不能超出了服务端最大所能接收的Packet的大小,否则会出现错误。

    需要注意的是如果当前文件存在,那么Put命令不会覆盖已有的文件而是追加,导致错误。传输文件之前需要首先删除同名文件。

    使用Get命令实现下载时,只需要提供NameHeader即可。具体例子参考上一节。

    l         删除文件或空目录

    使用Put命令,其NameHeader指定为文件名或目录名并将BodyHeader设置为空即可。

    非空目录无法删除,会返回错误。

     

           西门子手机还有移动、拷贝等功能,具体实现方法请参阅OBEX源代码。

    转载于:https://www.cnblogs.com/hesicong/archive/2005/08/03/207030.html

    展开全文
  • 手机数据传输方面基本OBEX应用分为 l 文件传输 l IrMC同步 文件传输又可以细分为以下基本操作 l 初始化连接 l 断开连接 l 设置路径 l 取得目录信息 l 创建目录 l 上传下载文件 l 删除文件或空...
  • 初步评估—>供应商提供验证版本—>公司内部测试—>研发和产品确认—>商务确认—>供应商自测—>供应商提供自测报告和正式版应用—>公司内部测试—>项目集成   供应商自测需包括以下几项内容: CTA测试用例(开启...
  • 手机jar应用软件开发

    2011-06-15 08:31:00
    有一套信息管理系统,用户登录后可以查看属于自己的信息,现在需要在手机上面开发一套软件,系统登录后,能查看属于自己的信息,并回复信息等等... 关键是 在手机上面怎么开发软件呢,说是说可以是jar软件,...
  • 中文:立波软件管家 应用支持/官方网站:http://www.weibo.com/souapp ... 应用官方下载链接: ...立波软件管家 是一款应用玩家的必备工具,可以检测出手机上用户软件和系统预置软件,提供对APP的全
  • 可以结合任何业务系统(OA、ERP、CRM、SAP、POS管理软件、物流行业管理软件、服装行业管理软件、酒店餐饮管理软件等等),在不需要增加和修改任何业务系统代码的情况下,轻松实现手机信息查询、业务审批、数据交互...
  • 相信大家手机中都有应用管理器,很多第三方软件也是应用管理,但是感觉他们做的功能太多,附加内容太多,不是那种简洁的应用,于是自己就在网上看了看一些人做的,结合自己的思想,做了一个自己喜欢的那种简洁的应用...
  • 平板使用左右fragment显示,手机使用activity显示,有任务管理器,SD卡浏览器,记事本功能,还有一个转存apk并安装的功能,但是需要在源码asset文件夹中内置apk才有效,新手开发,有需改进之处还望指出
  • 三方应用问题处理注意事项 1发给三方应用供应商的邮件请在邮件主题中标明正式的项目代号和产品型号,同时抄送给项目组相关成员(如SPM、测试人员等)。   2给三方应用供应商提交bug时,需要按确定好的bug模板提交...
  • 手机管理应用研究

    2014-07-09 14:08:02
    说明 ...在总篇中提到过垃圾清理,本篇将着重介绍针对缓存、卸载残留、无用数据等“静态内容”的清理,有关于系统进程的清理以及手机加速的...现在很多手机管理软件中都有垃圾清理的功能,本篇也来对垃圾清理做一
  • “天使手机销售管理系统”这一软件应用详细说明如下: 系统说明 本系统适合于WIN95、WIN98、WIN2000及WINDOWS NT操作系统,屏幕区域应在 800×600象素以上,IE5.0以上浏览器(包括IE5.0)。本系统最好配合...
  • 之前几篇文章我们介绍了如何去获取手机应用程序列表,已经实现对应用程序的一些操作:运行、卸载、分享。这个三个功能相对是比较简单,对于如何实现对一个应用程序加锁,这个相对复杂一点。在一些情况下,我们想对一...
  • 条码和二维码均能识别的手机软件。扫条码购物比价帮您省钱,扫二维码下载资源简洁方便。 此软件由易拍酷提供,结合PC互联网和手机双方面优势,为用户提供实用、便捷的扫码全新体验。 淘宝比价:用户逛街购物时可通过...
  • 使用MikroTik安卓手机管理软件可在现场或远程配置RouterOS路由器,或为MikroTik家庭访问点应用最基本的初始设置,设置内容和winbox差不多。要求:RouterOS v6或更高版本。
  • 中瀛手机维修管理软件 软件大小:45534 KB软件语言:简体中文软件类别:国产软件 / 共享版 / 商业贸易应用平台:Win9x/NT/2000/XP/2003界面预览:无插件情况: 投诉更新时间:2006-11-06 14:15:45下载次数...
  • 应用软件

    2015-09-08 05:58:41
    应用宝软件可以下载很多软件管理手机应用,卸载不用的
  • 目录 1. 适用范围 2. 工作职责 2.1 软件主管 2.2 项目经理 ...2.6 软件质量管理 3. 开发过程管理 4. 软件缺陷管理 4.1 目的 4.2 适用范围 4.3 定义 4.4 缺陷定义 4.5 缺陷生命周期 4.6...
  • 有没有什么方法或软件管理每个手机应用以及服务的每个自启行为?也就是能任意地添加或删除每个应用/服务的启动行为,而不是再搞个应用来截止某个应用的全部的启动行为。还要监控并阻止新装应用和已装应用自动添加...
  • 分辨率自适应多功能管应用管理软件平板使用左右fragment显示手机使用activity显示有任务管理器SD卡浏览器记事本功能还有一个转存apk并安装的功能但是需要在源码asset文件夹中内置apk才有效.rar,太多无法一一验证是否...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,560
精华内容 1,024
关键字:

手机应用管理软件