现在的位置: 首页 > 综合 > 正文

Android实现手机手电筒

2014年09月05日 ⁄ 综合 ⁄ 共 5442字 ⁄ 字号 评论关闭

首先,我们来看一下这个程序的运行截图:


首先点击菜单键,我们会看到菜单中有两个选项,一个是选择背光颜色,另一个是离开按钮,当我们点击背光颜色之后,会出现如上所示的效果。

接着,我们点击蓝色背光,出现如下所示的画面:


实现这个程序很简单,下面给出实现的代码:

1.主程序文件

package irdc.ex10_01; 

/* import相关class */
import android.app.Activity; 
import android.app.AlertDialog;
import android.content.Context; 
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle; 
import android.os.PowerManager; 
import android.view.Menu;
import android.view.MenuItem; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.LinearLayout;
import android.widget.Toast;

public class EX10_01 extends Activity 
{
  /*
   * PowerManager可以控制手机的wakelock,使手机处于恒亮的状态
   */
  private boolean ifLocked = false;
  private PowerManager.WakeLock mWakeLock; 
  private PowerManager mPowerManager; 
  private LinearLayout mLinearLayout;
  /* 独一无二的menu选项identifier,用以识别事件 */ 
  static final private int M_CHOOSE = Menu.FIRST; 
  static final private int M_EXIT = Menu.FIRST+1;
  /* 颜色菜单的颜色与文字数组 */
  private int[] color={R.drawable.white,R.drawable.blue,
                       R.drawable.pink,R.drawable.green,
                       R.drawable.orange,R.drawable.yellow};
  private int[] text={R.string.str_white,R.string.str_blue,
                      R.string.str_pink,R.string.str_green,
                      R.string.str_orange,R.string.str_yellow};
  
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
     
    /* 必须?setContentView之前调用全屏显示 */ 
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags 
    ( 
      WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN 
    );
    
    setContentView(R.layout.main);
    /* 初始化mLinearLayout */
    mLinearLayout=(LinearLayout)findViewById(R.id.myLinearLayout1);         
    /* 取得PowerManager */ 
    mPowerManager = (PowerManager)
                     getSystemService(Context.POWER_SERVICE); 
    /* 取得WakeLock */
    mWakeLock = mPowerManager.newWakeLock 
    ( 
      PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "BackLight" 
    );
    
    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    lp.screenBrightness = 1.0f; 
    getWindow().setAttributes(lp); 

  } 

  @Override 
  public boolean onCreateOptionsMenu(Menu menu) 
  { 
    /* menu组ID */ 
    int idGroup1 = 0;    
    /* menuItemID */ 
    int orderMenuItem1 = Menu.NONE; 
    int orderMenuItem2 = Menu.NONE+1; 
    /* 建立menu */ 
    menu.add(idGroup1,M_CHOOSE,orderMenuItem1,R.string.str_title);
    menu.add(idGroup1,M_EXIT,orderMenuItem2,R.string.str_exit); 
    menu.setGroupCheckable(idGroup1, true, true);
 
    return super.onCreateOptionsMenu(menu); 
  } 
   
  @Override 
  public boolean onOptionsItemSelected(MenuItem item) 
  {  
    switch(item.getItemId()) 
    { 
      case (M_CHOOSE):
        /* 弹出选择背后颜色的AlertDialog */
        new AlertDialog.Builder(EX10_01.this)
          .setTitle(getResources().getString(R.string.str_title))
          .setAdapter(new MyAdapter(this,color,text),listener1)
          .setPositiveButton("取消",
              new DialogInterface.OnClickListener()
          {
            public void onClick(DialogInterface dialog, int which)
            {
            }
          })
          .show();
        break; 
      case (M_EXIT): 
        /* 离开程序 */ 
        this.finish(); 
        break; 
    }
    return super.onOptionsItemSelected(item); 
  }
  
  /* 选择背后颜色的AlertDialog的OnClickListener */
  OnClickListener listener1=new DialogInterface.OnClickListener()
  {
    public void onClick(DialogInterface dialog,int which)
    {
      /* 更改背景颜色 */
      mLinearLayout.setBackgroundResource(color[which]);
      /* Toast显示设定的颜色 */
      Toast.makeText(EX10_01.this,
                     getResources().getString(text[which]),
                     Toast.LENGTH_LONG).show();
    }
  };
   
  @Override 
  protected void onResume() 
  {  
    /* onResume()时调用wakeLock() */
    wakeLock(); 
    super.onResume(); 
  } 
   
  @Override 
  protected void onPause() 
  {
    /* onPause()时调用wakeUnlock() */
    wakeUnlock(); 
    super.onPause();
  } 
  
  /* 唤起WakeLock的method */
  private void wakeLock()
  { 
    if (!ifLocked) 
    { 
      ifLocked = true;
      mWakeLock.acquire();
    }
  } 

  /* 释放WakeLock的method */
  private void wakeUnlock() 
  { 
    if (ifLocked) 
    { 
      mWakeLock.release(); 
      ifLocked = false;
    }
  }
  
}

2.Adapter文件

package irdc.ex10_01;

/* import相关class */
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/* 自定义的Adapter,继承android.widget.BaseAdapter */
public class MyAdapter extends BaseAdapter
{
  private LayoutInflater mInflater;
  private int[] color;
  private int[] text;

  public MyAdapter(Context context,int[] _color,int[] _text)
  {
    mInflater = LayoutInflater.from(context);
    color = _color;
    text = _text;
  }
  
  /* 因继承BaseAdapter,需重写以下method */
  @Override
  public int getCount()
  {
    return text.length;
  }

  @Override
  public Object getItem(int position)
  {
    return text[position];
  }
  
  @Override
  public long getItemId(int position)
  {
    return position;
  }
  
  @Override
  public View getView(int position,View convertView,ViewGroup par)
  {
    ViewHolder holder;
    
    if(convertView == null)
    {
      /* 使用自定义的change_color作为Layout */
      convertView = mInflater.inflate(R.layout.change_color, null);
      /* 初始化holder的text */
      holder = new ViewHolder();
      holder.mText=(TextView)convertView.findViewById(R.id.myText);
      convertView.setTag(holder);
    }
    else
    {
      holder = (ViewHolder) convertView.getTag();
    }
    holder.mText.setText(text[position]);
    holder.mText.setBackgroundResource(color[position]);
     
    return convertView;
  }
  
  /* class ViewHolder */
  private class ViewHolder
  {
    TextView mText;
  }
}

3.两个布局文件

3.1 主布局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/myLinearLayout1" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"
  android:background="@drawable/white" 
/>

3.2 对话框布局

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/myText"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_gravity="center_vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="10px"
  android:textSize="18px"
  android:textColor="@drawable/black"
/>

4.我们需要在程序中加入如下的权限

 <uses-permission android:name="android.permission.WAKE_LOCK"/> 
  <uses-permission android:name="android.permission.WRITE_SETTINGS"/> 
  <uses-permission android:name="android.permission.HARDWARE_TEST"/>

抱歉!评论已关闭.