140.Fragment实现程序锁未加锁模块

来源:互联网 发布:万网域名证书生成 编辑:程序博客网 时间:2024/05/20 05:57

Fragment中获取到上下文的方法是通过getActivity()获取,程序里面有的没有加锁有的加锁了,可以通过创建一个数据库,没有枷锁的数据库来存放没有加锁的数据库文件。做动画和删除程序所中的文件要注意线程安全问题,可以让先睡觉SystemClock.sleep(5000);,睡的过程中线程锁住。在子线程中刷新UI可以使用runOnUiThread刷新

入口界面activity_advancedtools.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:orientation="vertical" >        <TextView         style="@style/TitleStyle"        android:text="高级工具"        />    <TextView         android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@drawable/button"    android:text="电话归属地查询"    android:textColor="@color/black"    android:drawableLeft="@android:drawable/ic_menu_camera"    android:gravity="center_vertical"    android:textSize="20sp"    android:drawablePadding="5dp"    android:padding="10dp"    android:clickable="true"    android:onClick="numberAddressQuery"        />    <TextView         android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@drawable/button"    android:text="短信备份"    android:textColor="@color/black"    android:drawableLeft="@android:drawable/ic_menu_camera"    android:gravity="center_vertical"    android:textSize="20sp"    android:drawablePadding="5dp"    android:padding="10dp"    android:clickable="true"    android:onClick="backUpsms"        />          <ProgressBar           android:id="@+id/progressBar1"          style="?android:attr/progressBarStyleHorizontal"          android:layout_width="match_parent"          android:layout_height="wrap_content"          />       <TextView         android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@drawable/button"    android:text="程序锁"    android:textColor="@color/black"    android:drawableLeft="@android:drawable/ic_menu_camera"    android:gravity="center_vertical"    android:textSize="20sp"    android:drawablePadding="5dp"    android:padding="10dp"    android:clickable="true"    android:onClick="appLock"        />  </LinearLayout>

程序锁的主界面activity_applock.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:orientation="vertical" >        <TextView        android:layout_width="match_parent"        android:layout_height="60dip"        android:background="#8866ff00"        android:gravity="center"        android:text="程序锁"        android:textSize="24sp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"        android:orientation="horizontal" >        <TextView            android:id="@+id/tv_unlock"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/tab_left_pressed"            android:gravity="center"            android:text="未加锁" />        <TextView            android:id="@+id/tv_lock"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/tab_right_default"            android:gravity="center"            android:text="已加锁" />    </LinearLayout>    <FrameLayout        android:id="@+id/fl_content"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>


没有添加程序锁的ListView的显示界面item_lock_fragment.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:orientation="vertical" >    <TextView     android:id="@+id/tv_unlock"    android:layout_width="match_parent"    android:layout_height="wrap_content"    />    <ListView         android:id="@+id/list_view"        android:layout_width="match_parent"    android:layout_height="match_parent"        ></ListView></LinearLayout>

程序锁的每一个条目activity_lock.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:orientation="horizontal" >        <ImageView         android:id="@+id/iv_icon"        android:layout_width="50dp"    android:layout_height="50dp"    android:src="@drawable/ic_launcher"        />    <TextView         android:id="@+id/tv_name"        android:layout_width="match_parent"    android:layout_height="wrap_content"    android:text="应用的名字"    android:layout_weight="1111"        />    <ImageView         android:id="@+id/iv_unlock"        android:layout_width="50dp"    android:layout_height="50dp"    android:src="@drawable/list_button_lock_default"        /></LinearLayout>

程序锁的创建数据库的文件AppLockOpenHelper.java
package com.ldw.safe.db.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;/* * 创建一个applock的数据库的表,来存放加锁的数据库 */public class AppLockOpenHelper extends SQLiteOpenHelper {public AppLockOpenHelper(Context context) {super(context, "applock.db", null, 1);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {//数据库中存取包名,包名是唯一的db.execSQL("create table info (_id integer primary key autoincrement,packagename varchar(20)) ");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

数据库的dao文件AppLockDao.java

package com.ldw.safe.db.dao;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/* * 程序所中加了锁的数据库的逻辑文件 */public class AppLockDao {private AppLockOpenHelper helper;public AppLockDao(Context context){helper = new AppLockOpenHelper(context);}/* * 添加到程序所中 */public void add(String packageName){SQLiteDatabase db = helper.getWritableDatabase();ContentValues values = new ContentValues();values.put("packagename", packageName);db.insert("info", null, values);db.close();}/* * 从程序锁里面删除当前的包 */public void delete(String packageName) {SQLiteDatabase db = helper.getWritableDatabase();db.delete("info", "packagename=?", new String[] { packageName });db.close();}/*     * 查询当前的包是否在程序锁里面     */public boolean find(String packageName) {boolean result = false;SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.query("info", null, "packagename=?",new String[] { packageName }, null, null, null);if (cursor.moveToNext()) {result = true;}cursor.close();db.close();return result;}}

程序锁的入口逻辑文件AdvancedToolsActivity.java

package com.ldw.safe.Activity;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.ProgressBar;import android.widget.Toast;import com.ldw.safe.R;import com.ldw.safe.utils.SmsUtils;import com.ldw.safe.utils.SmsUtils.BackUpCallBackSms;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.ViewInject;/* * 高级工具,包含归属地和短信备份 */public class AdvancedToolsActivity extends Activity {private ProgressDialog pd;//注解的形式获取对象@ViewInject(R.id.progressBar1)private ProgressBar progressBar1;@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_advancedtools);        ViewUtils.inject(this);}/* * 归属地查询 */public void numberAddressQuery(View v){startActivity(new Intent(this, AddressActivity.class));}/* * 短信备份的功能 */public void backUpsms(View v){//*换一种进度条的显示方法,ProgressDialog是对话框的形式,不能改变位置,使用布局的形式显示pd = new ProgressDialog(AdvancedToolsActivity.this);pd.setTitle("提示");pd.setMessage("正在备份信息");//设置进度条对话框的样式,水平的进度条pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pd.show();new Thread(){public void run() {//传统方法实现进度条//boolean result = SmsUtils.backUp(AdvancedToolsActivity.this, pd);//接口的方法实现进度条boolean result = SmsUtils.backUp(AdvancedToolsActivity.this, new BackUpCallBackSms(){@Overridepublic void befor(int count) {//方法执行前,初始化2个进度条的最大进度pd.setMax(count);progressBar1.setMax(count);}@Overridepublic void onBackUpSms(int process) {pd.setProgress(process);progressBar1.setProgress(process);}});if(result){//子线程不能刷新UI,这种方法子线程弹出ToastLooper.prepare();Toast.makeText(AdvancedToolsActivity.this, "备份成功", Toast.LENGTH_SHORT).show();Looper.loop();}else{Looper.prepare();Toast.makeText(AdvancedToolsActivity.this, "备份失败", Toast.LENGTH_SHORT).show();Looper.loop();}pd.dismiss();};}.start();}/* * 程序锁 */public void appLock(View v){//点击以后页面跳转Intent intent = new Intent(AdvancedToolsActivity.this, AppLockActivity.class);startActivity(intent);}}

程序所主界面的逻辑文件,实现程序所显示和没有加锁的显示AppLockActivity.java

package com.ldw.safe.Activity;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.View;import android.view.View.OnClickListener;import android.widget.FrameLayout;import android.widget.TextView;import com.ldw.safe.R;import com.ldw.safe.fragment.LockFragment;import com.ldw.safe.fragment.UnLockFragment;public class AppLockActivity extends FragmentActivity implements OnClickListener {private FrameLayout fl_layout;private TextView tv_lock;private TextView tv_unlock;private UnLockFragment unLockFragment;private LockFragment lockFragment;private FragmentManager fragmentManager;@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                initUi();}private void initUi() {setContentView(R.layout.activity_applock);fl_layout = (FrameLayout)findViewById(R.id.fl_content);tv_lock = (TextView) findViewById(R.id.tv_lock); tv_unlock = (TextView) findViewById(R.id.tv_unlock); tv_lock.setOnClickListener(this);tv_unlock.setOnClickListener(this);fragmentManager = getSupportFragmentManager();FragmentTransaction mTransaction = fragmentManager.beginTransaction();unLockFragment = new UnLockFragment();lockFragment = new LockFragment();/** * 替换界面 * 1 需要替换的界面的id * 2具体指某一个fragment的对象 */mTransaction.replace(R.id.fl_content, unLockFragment).commit();}@Overridepublic void onClick(View v){FragmentTransaction ft = fragmentManager.beginTransaction();switch(v.getId()){case R.id.tv_unlock: //没有加锁tv_unlock.setBackgroundResource(R.drawable.tab_left_pressed);tv_lock.setBackgroundResource(R.drawable.tab_right_default);//切换ft.replace(R.id.fl_content, unLockFragment);System.out.println("切换到unlockFragment");break;case R.id.tv_lock://加锁tv_unlock.setBackgroundResource(R.drawable.tab_left_default);tv_lock.setBackgroundResource(R.drawable.tab_right_pressed);//切换ft.replace(R.id.fl_content, lockFragment);System.out.println("切换到lockFragment");break;}ft.commit();}}


程序锁的逻辑文件UnLockFragment.java

package com.ldw.safe.fragment;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.os.SystemClock;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.ldw.safe.R;import com.ldw.safe.bean.AppInfo;import com.ldw.safe.db.dao.AppLockDao;import com.ldw.safe.engine.AppInfos;/* * 程序未枷锁的逻辑文件 */public class UnLockFragment extends Fragment {private View view;private ListView list_view;private TextView tv_unlock;private List<AppInfo> appInfos;private AppLockDao dao;private List<AppInfo> unLockLists;private UnLockAdapter adapter;/* * 类似activity里面的setContentView */@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {view = inflater.inflate(R.layout.item_unlock_fragment, null);list_view = (ListView) view.findViewById(R.id.list_view);tv_unlock = (TextView) view.findViewById(R.id.tv_unlock);return view;}@Overridepublic void onStart() {super.onStart();//fragment中通过getActivity()获取到上下文appInfos = AppInfos.getAppInfos(getActivity());dao = new AppLockDao(getActivity());//定义一个没有加锁的数据库unLockLists = new ArrayList<AppInfo>();for(AppInfo appInfo : appInfos){//判断当前的应用是不是在程序锁中if(dao.find(appInfo.getApkPackageName())){}else {// 如果查询不到说明没有在程序锁的数据库里面unLockLists.add(appInfo);}}adapter = new UnLockAdapter();list_view.setAdapter(adapter);}public class UnLockAdapter extends BaseAdapter{@Overridepublic int getCount() {tv_unlock.setText("未加锁(" + unLockLists.size() + ")个");return unLockLists.size();}@Overridepublic Object getItem(int position) {return unLockLists.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder = null;final View view;final AppInfo appInfo;if(convertView == null){//fragment中通过getActivity()获取到上下文view = View.inflate(getActivity(), R.layout.item_unlock, null);holder = new ViewHolder();holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);holder.tv_name = (TextView) view.findViewById(R.id.tv_name);holder.iv_unlock = (ImageView) view.findViewById(R.id.iv_unlock);view.setTag(holder);}else{view = convertView;holder = (ViewHolder) view.getTag();}appInfo = unLockLists.get(position);holder.iv_icon.setImageDrawable(unLockLists.get(position).getIcon());holder.tv_name.setText(unLockLists.get(position).getApkName());//吧程序所添加到程序锁数据库中holder.iv_unlock.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// 初始化一个位移动画TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,Animation.RELATIVE_TO_SELF, 1.0f,Animation.RELATIVE_TO_SELF, 0,Animation.RELATIVE_TO_SELF, 0);// 设置动画时间translateAnimation.setDuration(5000);// 开始动画,在view上实现动画view.startAnimation(translateAnimation);new Thread(){public void run() {//线程锁起来,让动画先做再删除SystemClock.sleep(5000);//主线程刷新UIgetActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {//添加到数据库中,app加锁dao.add(appInfo.getApkPackageName());//没有枷锁的程序就移除一个unLockLists.remove(position);// 刷新界面adapter.notifyDataSetChanged();}});};}.start();}});return view;}}static class ViewHolder{ImageView iv_icon;TextView tv_name;ImageView iv_unlock;}}


0 0