当前位置: 代码迷 >> Android >> Android特色开发-情景模式
  详细解决方案

Android特色开发-情景模式

热度:19   发布时间:2016-05-01 14:23:33.0
Android特色开发--情景模式

1:RingProfile

package com.yarin.android.RingProfile;import java.util.Date;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.TabActivity;import android.content.Context;import android.content.Intent;import android.media.AudioManager;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.TabHost;import android.widget.TimePicker;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.TabHost.OnTabChangeListener;public class RingProfile extends TabActivity{	private static final String TAG="RingToggle";		//声明TabHost对象	private TabHost mTabHost;	protected boolean isChange;		private AlarmManager mAlarmManager;		private TimePicker mTimePicker ;		private int mTab;		private ImageView			myImage;	private ImageButton			downButton;	private ImageButton			upButton;	private ImageButton			normalButton;	private ImageButton			muteButton;	private ImageButton			vibrateButton;	private ProgressBar			myProgress;	private AudioManager		audioMa;	private int					volume	= 0;	  	@Override	public void onCreate(Bundle savedInstanceState)	{		super.onCreate(savedInstanceState);		setContentView(R.layout.main);				//取得TabHost对象		mTabHost = getTabHost();	    		/* 为TabHost添加标签 */		//新建一个newTabSpec(newTabSpec)		//设置其标签和图标(setIndicator)		//设置内容(setContent)	    mTabHost.addTab(mTabHost.newTabSpec("tab_test1")	    		.setIndicator("普通情景模式",getResources().getDrawable(R.drawable.icon))	    		.setContent(R.id.RadioGroup01));	    mTabHost.addTab(mTabHost.newTabSpec("tab_test2")	    		.setIndicator("定时情景模式",getResources().getDrawable(R.drawable.timeprofile))	    		.setContent(R.id.RelativeLayout01));	    mTabHost.addTab(mTabHost.newTabSpec("tab_test3")	    		.setIndicator("自定义情景模式",getResources().getDrawable(R.drawable.addprofile))	    		.setContent(R.id.AbsoluteLayout03));        	    //设置TabHost的背景图片资源	    mTabHost.setBackgroundResource(R.drawable.bg);	    	    //设置当前显示哪一个标签	    mTabHost.setCurrentTab(0);	    mTab = 0;	    updateRadioGroup();	    	    //初始化,取得AudioManager	    audioMa = (AudioManager)getSystemService(Context.AUDIO_SERVICE);	    myImage = (ImageView)findViewById(R.id.myImage); 	    myProgress = (ProgressBar)findViewById(R.id.myProgress); 	    downButton = (ImageButton)findViewById(R.id.downButton); 	    upButton = (ImageButton)findViewById(R.id.upButton); 	    normalButton = (ImageButton)findViewById(R.id.normalButton); 	    muteButton = (ImageButton)findViewById(R.id.muteButton); 	    vibrateButton = (ImageButton)findViewById(R.id.vibrateButton); 	    	    	    //标签切换事件处理,setOnTabChangedListener 	    mTabHost.setOnTabChangedListener(new OnTabChangeListener()	    {            @Override            public void onTabChanged(String tabId)             {            	if ( tabId.equals("tab_test1") )				{            		mTab = 0;            		                    mAlarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);                    mTimePicker = (TimePicker)findViewById(R.id.timePkr);                    mTimePicker.setIs24HourView(true);                                                    		updateRadioGroup();				}            	else if ( tabId.equals("tab_test2") )				{            		mTab = 1;                    mAlarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);                    mTimePicker = (TimePicker)findViewById(R.id.timePkr);                    mTimePicker.setIs24HourView(true);                                		updateRadioGroup();				}            }                    });                /***************************************************************/        RadioGroup group1 = (RadioGroup) findViewById(R.id.RadioGroup01);        group1.setOnCheckedChangeListener(new OnCheckedChangeListener()         {        	public void onCheckedChanged(RadioGroup group, int checkedId)         	{            	if (isChange)            		return;                         	switch (checkedId)            	{                           		case R.id.ring_and_vibrate01: ringAndVibrate(); break;                           		case R.id.ring01: ring(); break;                               		case R.id.vibrate01: vibrate(); break;                                          		case R.id.silent01: silent(); break;                           	}                          	RadioButton radio = (RadioButton) findViewById(checkedId);                           	if (radio != null)            	            		radio.setTextSize(30);                      	}	        });        //RadioButton添加监听器        for (int i = 0, l = group1.getChildCount(); i < l; i++)         {           	RadioButton radio = (RadioButton) group1.getChildAt(i);            radio.setOnTouchListener(new OnTouchListener()             {                           	public boolean onTouch(View v, MotionEvent event)                             	{        				            		RadioButton radio = (RadioButton) v;               	            		if (!radio.isChecked())                  		            			return false;             		            		radio.setTextSize(30);                                   		                                        		            		return false;                                        	            	}                           });        }        /***************************************************************/        //添加onChangeListener        RadioGroup group2 = (RadioGroup) findViewById(R.id.RadioGroup02);        group2.setOnCheckedChangeListener(new OnCheckedChangeListener()         {        	public void onCheckedChanged(RadioGroup group, int checkedId)         	{            	if (isChange)            		return;                         	switch (checkedId)            	{                           		case R.id.ring_and_vibrate02: ringAndVibrate(); break;                           		case R.id.ring02: ring(); break;                               		case R.id.vibrate02: vibrate(); break;                                          		case R.id.silent02: silent(); break;                           	}                          	RadioButton radio = (RadioButton) findViewById(checkedId);                           	if (radio != null)            	            		radio.setTextSize(30);                      	}	        });        //RadioButton添加监听器        for (int i = 0, l = group2.getChildCount(); i < l; i++)         {           	RadioButton radio = (RadioButton) group2.getChildAt(i);            radio.setOnTouchListener(new OnTouchListener()             {                           	public boolean onTouch(View v, MotionEvent event)                             	{        				            		RadioButton radio = (RadioButton) v;               	            		if (!radio.isChecked())                  		            			return false;             		            		radio.setTextSize(30);                                   		                                        		            		return false;                                        	            	}                           });        }                //取得手机的初始音量,并初始化进度条        volume=audioMa.getStreamVolume(AudioManager.STREAM_RING);         myProgress.setProgress(volume);        //取得初始模式,并分别设置图标        int mode=audioMa.getRingerMode();        if(mode==AudioManager.RINGER_MODE_NORMAL)        {          myImage.setImageDrawable(getResources()                                   .getDrawable(R.drawable.icon));        }        else if(mode==AudioManager.RINGER_MODE_SILENT)        {          myImage.setImageDrawable(getResources()                                   .getDrawable(R.drawable.mute));        }        else if(mode==AudioManager.RINGER_MODE_VIBRATE)        {          myImage.setImageDrawable(getResources()                                   .getDrawable(R.drawable.vibrate));        }        //降低音量按键        downButton.setOnClickListener(new Button.OnClickListener()         {           @Override           public void onClick(View arg0)           {        	//adjustVolume可以增加和降低音量            audioMa.adjustVolume(AudioManager.ADJUST_LOWER, 0);             volume=audioMa.getStreamVolume(AudioManager.STREAM_RING);            //设置进度条            myProgress.setProgress(volume);            //设置图标            int mode=audioMa.getRingerMode();            if(mode==AudioManager.RINGER_MODE_NORMAL)            {              myImage.setImageDrawable(getResources()                                      .getDrawable(R.drawable.icon));            }            else if(mode==AudioManager.RINGER_MODE_SILENT)            {              myImage.setImageDrawable(getResources()                                       .getDrawable(R.drawable.mute));            }            else if(mode==AudioManager.RINGER_MODE_VIBRATE)            {              myImage.setImageDrawable(getResources()                                      .getDrawable(R.drawable.vibrate));            }          }         });         //提高音量        upButton.setOnClickListener(new Button.OnClickListener()         {           @Override           public void onClick(View arg0)           {         	  //AudioManager.ADJUST_RAISE提高音量            audioMa.adjustVolume(AudioManager.ADJUST_RAISE, 0);            volume=audioMa.getStreamVolume(AudioManager.STREAM_RING);            myProgress.setProgress(volume);            int mode=audioMa.getRingerMode();            if(mode==AudioManager.RINGER_MODE_NORMAL)            {              myImage.setImageDrawable(getResources()                                       .getDrawable(R.drawable.icon));            }            else if(mode==AudioManager.RINGER_MODE_SILENT)            {              myImage.setImageDrawable(getResources()                                       .getDrawable(R.drawable.mute));            }            else if(mode==AudioManager.RINGER_MODE_VIBRATE)            {              myImage.setImageDrawable(getResources()                                      .getDrawable(R.drawable.vibrate));            }          }         });         //正常状态        normalButton.setOnClickListener(new Button.OnClickListener()         {           @Override           public void onClick(View arg0)           {            audioMa.setRingerMode(AudioManager.RINGER_MODE_NORMAL);            volume=audioMa.getStreamVolume(AudioManager.STREAM_RING);             myProgress.setProgress(volume);            myImage.setImageDrawable(getResources()                                     .getDrawable(R.drawable.icon));          }         });        //静音状态        muteButton.setOnClickListener(new Button.OnClickListener()         {           @Override           public void onClick(View arg0)           {             audioMa.setRingerMode(AudioManager.RINGER_MODE_SILENT);             volume=audioMa.getStreamVolume(AudioManager.STREAM_RING);            myProgress.setProgress(volume);            myImage.setImageDrawable(getResources()                                     .getDrawable(R.drawable.mute));           }         });         //振动状态        vibrateButton.setOnClickListener(new Button.OnClickListener()         {           @Override           public void onClick(View arg0)           {             audioMa.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);             volume=audioMa.getStreamVolume(AudioManager.STREAM_RING);             myProgress.setProgress(volume);            myImage.setImageDrawable(getResources()                                     .getDrawable(R.drawable.vibrate));           }         }); 	}	// 更新情景模式	protected void updateRadioGroup()	{		int checkedId = currentMode();		RadioButton checked = (RadioButton) findViewById(checkedId);		isChange = true;		checked.setChecked(true);		isChange = false;	}	// 取得当前情景模式	protected int currentMode()	{		AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);		switch (audio.getRingerMode())		{			case AudioManager.RINGER_MODE_SILENT:				if ( mTab == 0 )				{					return R.id.silent01;				}				else				{					return R.id.silent02;				}							case AudioManager.RINGER_MODE_VIBRATE:				if ( mTab == 0 )				{					return R.id.vibrate01;				}				else				{					return R.id.vibrate02;				}		}		if (audio.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER))		{			if ( mTab == 0 )			{				return R.id.ring_and_vibrate01;			}			else			{				return R.id.ring_and_vibrate02;			}		}		if ( mTab == 0 )		{			return R.id.ring01;		}		else		{			return R.id.ring02;		}	}	/***************************************************************/	// 铃声和震动	protected void ringAndVibrate()	{		Intent intent = new Intent(RingBroadcastReceiver.RV_CHANGED);		if ( mTab == 0 )		{			intent.putExtra("checkedId", R.id.ring_and_vibrate01);		}		else		{			intent.putExtra("checkedId", R.id.ring_and_vibrate02);		}		PendingIntent alarmIntent = PendingIntent.getBroadcast(this, RingBroadcastReceiver.REQUEST_CODE, intent, 0);		Log.e(TAG, "" + intent);		mAlarmManager.set(AlarmManager.RTC_WAKEUP, getTime(), alarmIntent);	}	// 铃声	protected void ring()	{		Intent intent = new Intent(RingBroadcastReceiver.RING_CHANGED);		if ( mTab == 0 )		{			intent.putExtra("checkedId", R.id.ring01);		}		else		{			intent.putExtra("checkedId", R.id.ring02);		}		PendingIntent alarmIntent = PendingIntent.getBroadcast(this, RingBroadcastReceiver.REQUEST_CODE, intent, 0);		Log.e(TAG, "" + intent);		mAlarmManager.set(AlarmManager.RTC_WAKEUP, getTime(), alarmIntent);	}	// 震动	protected void vibrate()	{		Intent intent = new Intent(RingBroadcastReceiver.VIBRATE_CHANGED);		if ( mTab == 0 )		{			intent.putExtra("checkedId", R.id.vibrate01);		}		else		{			intent.putExtra("checkedId", R.id.vibrate02);		}		PendingIntent alarmIntent = PendingIntent.getBroadcast(this, RingBroadcastReceiver.REQUEST_CODE, intent, 0);		Log.e(TAG, "" + intent);		mAlarmManager.set(AlarmManager.RTC_WAKEUP, getTime(), alarmIntent);	}	// 静音	protected void silent()	{		Intent intent = new Intent(RingBroadcastReceiver.SILENT_CHANGED);		if ( mTab == 0 )		{			intent.putExtra("checkedId", R.id.silent01);		}		else		{			intent.putExtra("checkedId", R.id.silent02);		}		PendingIntent alarmIntent = PendingIntent.getBroadcast(this, RingBroadcastReceiver.REQUEST_CODE, intent, 0);		Log.e(TAG, "" + intent);		mAlarmManager.set(AlarmManager.RTC_WAKEUP, getTime(), alarmIntent);	}		// 计算切换时间	private long getTime()	{		Date dateNow = new Date();		long hour = mTimePicker.getCurrentHour() - dateNow.getHours();		long min = mTimePicker.getCurrentMinute() - dateNow.getMinutes();		long second = dateNow.getSeconds();		return dateNow.getTime() + (hour * 60 + min) * 60 * 1000 - second * 1000;	}		/***********************************************************************************/}

?2:RingBroadcastReceiver

package com.yarin.android.RingProfile;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.media.AudioManager;import android.util.Log;public class RingBroadcastReceiver extends BroadcastReceiver{	private static final String TAG	 = "RingBroadcastReceiver";	public static final String VIBRATE_CHANGED = "com.yarin.android.RingProfile.VIBRATE_CHANGED";	public static final String SILENT_CHANGED	= "com.yarin.android.RingProfile.SILENT_CHANGED";	public static final String RV_CHANGED	 = "com.yarin.android.RingProfile.RV_CHANGED";	public static final String RING_CHANGED = "com.yarin.android.RingProfile.RING_CHANGED";	public static final int REQUEST_CODE	= 0;	@Override	public void onReceive(Context context, Intent intent)	{		AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);		int checkedId = intent.getIntExtra("checkedId", 0);		Log.e(TAG, checkedId + intent.getAction());		// 切换情景模式		switch (checkedId)		{			case R.id.ring_and_vibrate01:			case R.id.ring_and_vibrate02:				ringAndVibrate(audio);				break;			case R.id.vibrate01:			case R.id.vibrate02:				vibrate(audio);				break;			case R.id.silent01:			case R.id.silent02:				silent(audio);				break;			default:				ring(audio);				break;		}	}	// 铃声和震动	protected void ringAndVibrate(AudioManager audio)	{		audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);	}	// 铃声	protected void ring(AudioManager audio)	{		audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);	}	// 震动	protected void vibrate(AudioManager audio)	{		audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);		}	// 静音	protected void silent(AudioManager audio)	{		audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);	}}

?

3:main.xml

<?xml version="1.0" encoding="utf-8"?><TabHost xmlns:android="http://schemas.android.com/apk/res/android"	android:id="@android:id/tabhost" android:layout_width="fill_parent"	android:layout_height="fill_parent">	<LinearLayout android:orientation="vertical"		android:layout_width="fill_parent" android:layout_height="fill_parent">		<TabWidget android:id="@android:id/tabs"			android:layout_width="fill_parent" android:layout_height="wrap_content" />		<FrameLayout android:id="@android:id/tabcontent"			android:layout_width="fill_parent" android:layout_height="fill_parent">			<RadioGroup android:id="@+id/RadioGroup01"				android:orientation="vertical" android:layout_height="wrap_content"				android:layout_width="wrap_content" android:layout_centerInParent="true">				<RadioButton android:text="@string/ring_and_vibrate"					android:id="@+id/ring_and_vibrate01" android:layout_width="fill_parent"					android:textSize="24sp" android:paddingLeft="50sp" />				<RadioButton android:text="@string/ring" android:id="@+id/ring01"					android:layout_width="fill_parent" android:textSize="24sp"					android:paddingLeft="50sp" android:paddingRight="50sp" />				<RadioButton android:text="@string/vibrate" android:id="@+id/vibrate01"					android:layout_width="fill_parent" android:textSize="24sp"					android:paddingLeft="50sp" android:paddingRight="50sp" />				<RadioButton android:text="@string/silent" android:id="@+id/silent01"					android:layout_width="fill_parent" android:textSize="24sp"					android:paddingLeft="50sp" android:paddingRight="50sp" />			</RadioGroup>			<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"				android:id="@+id/RelativeLayout01" android:orientation="vertical"				android:layout_width="fill_parent" android:layout_height="fill_parent"				android:padding="12sp">				<TextView android:layout_width="wrap_content"					android:layout_height="wrap_content" android:text="@string/help"					android:textSize="20px" android:textStyle="bold" android:id="@+id/help"></TextView>				<TimePicker android:id="@+id/timePkr"					android:layout_below="@id/help" android:layout_width="wrap_content"					android:layout_height="wrap_content"></TimePicker>				<RadioGroup android:orientation="vertical" android:id="@+id/RadioGroup02"					android:layout_below="@id/timePkr" android:layout_height="wrap_content"					android:layout_width="wrap_content" android:layout_centerInParent="true">					<RadioButton android:text="@string/ring_and_vibrate"						android:id="@+id/ring_and_vibrate02" android:layout_width="fill_parent"						android:textSize="24sp" android:paddingLeft="50sp" />					<RadioButton android:text="@string/ring" android:id="@+id/ring02"						android:layout_width="fill_parent" android:textSize="24sp"						android:paddingLeft="50sp" android:paddingRight="50sp" />					<RadioButton android:text="@string/vibrate" android:id="@+id/vibrate02"						android:layout_width="fill_parent" android:textSize="24sp"						android:paddingLeft="50sp" android:paddingRight="50sp" />					<RadioButton android:text="@string/silent" android:id="@+id/silent02"						android:layout_width="fill_parent" android:textSize="24sp"						android:paddingLeft="50sp" android:paddingRight="50sp" />				</RadioGroup>			</RelativeLayout>			<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"				android:id="@+id/AbsoluteLayout03" android:layout_width="fill_parent"				android:layout_height="fill_parent">				<TextView android:id="@+id/myText1" android:layout_width="wrap_content"					android:layout_height="wrap_content" android:text="情景模式:"					android:textSize="16sp" android:layout_x="20px" android:layout_y="42px">				</TextView>				<ImageView android:id="@+id/myImage" android:layout_width="48px"					android:layout_height="48px" android:layout_x="110px"					android:layout_y="32px">				</ImageView>				<TextView android:id="@+id/myText2" android:layout_width="wrap_content"					android:layout_height="wrap_content" android:text="声音音量:"					android:textSize="16sp" android:layout_x="20px" android:layout_y="102px">				</TextView>				<ProgressBar android:id="@+id/myProgress"					style="?android:attr/progressBarStyleHorizontal"					android:layout_width="160dip" android:layout_height="wrap_content"					android:max="7" android:progress="5" android:layout_x="110px"					android:layout_y="102px">				</ProgressBar>				<ImageButton android:id="@+id/downButton"					android:layout_width="100px" android:layout_height="100px"					android:layout_x="50px" android:layout_y="162px" android:src="@drawable/down">				</ImageButton>				<ImageButton android:id="@+id/upButton"					android:layout_width="100px" android:layout_height="100px"					android:layout_x="150px" android:layout_y="162px" android:src="@drawable/up">				</ImageButton>				<ImageButton android:id="@+id/normalButton"					android:layout_width="60px" android:layout_height="60px"					android:layout_x="50px" android:layout_y="272px" android:src="@drawable/icon">				</ImageButton>				<ImageButton android:id="@+id/muteButton"					android:layout_width="60px" android:layout_height="60px"					android:layout_x="120px" android:layout_y="272px" android:src="@drawable/mute">				</ImageButton>				<ImageButton android:id="@+id/vibrateButton"					android:layout_width="60px" android:layout_height="60px"					android:layout_x="190px" android:layout_y="272px" android:src="@drawable/vibrate">				</ImageButton>			</AbsoluteLayout>		</FrameLayout>	</LinearLayout></TabHost>

?

4:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.yarin.android.RingProfile"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".RingProfile"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    	   <receiver android:name="RingBroadcastReceiver">            <intent-filter>               <action android:name="com.yarin.android.RingProfile.RV_CHANGED" />               <action android:name="com.yarin.android.RingProfile.RING_CHANGED" />               <action android:name="com.yarin.android.RingProfile.VIBRATE_CHANGED" />               <action android:name="com.yarin.android.RingProfile.SILENT_CHANGED" />            </intent-filter>        </receiver>    </application>    <uses-sdk android:minSdkVersion="5" /></manifest> 

?

  相关解决方案