getRingerMode () always returns a value of 0
I'm trying to determine the current ringer state by using the getRingerMode() method.
I create a variable:开发者_运维知识库 private int currentRingerMode;
Set my variable to: currentRingerMode = getRingerMode();
And use a methods as follows:
private int getRingerMode() { // TODO Auto-generated method stub return currentRingerMode; }But when I log the value of the variable with: Log.v(TAG, "value=" + currentRingerMode);
A value of 0 is always returned, regardless of the the ringer state...??? What am I doing wrong?
Thanks.
-Brian
-Update Here is my current full code.
package com.DoNotDisturb.widget;
import com.DoNotDisturb.widget.R;
import android.app.PendingIntent; import android.app.Service; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.media.AudioManager; import android.util.Log; import android.widget.RemoteViews; import android.widget.Toast;
public class DoNotDisturbWidget extends AppWidgetProvider {
private static final String ACTION_WIDGET_RECEIVER = "ActionRecieverWidget";
private static final String TAG = null;
private int currentRingerMode;
private int ringerMode;
private RemoteViews views = new RemoteViews("com.DoNotDisturb.widget", R.layout.main);
private AudioManager getSystemService(String audioService) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Intent intent = new Intent(context, DoNotDisturbWidget.class);
intent.setAction(ACTION_WIDGET_RECEIVER);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.button_one, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, views);
AudioManager mAudioManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
int ringerMode = mAudioManager.getRingerMode();
Log.d(TAG, "ringerMode value=" + ringerMode);
ContextWrapper mContext = null;
AudioManager manager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
currentRingerMode = manager.getRingerMode();
Log.d(TAG, "ringerMode value=" + currentRingerMode);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)){
Log.d(TAG, "ringerMode value=" + ringerMode);
try {
//Silent
if(currentRingerMode == 2){
Toast.makeText(context, "Silent", Toast.LENGTH_SHORT).show();
((AudioManager) context.getSystemService(Context.AUDIO_SERVICE)).setRingerMode(AudioManager.RINGER_MODE_SILENT);
Log.v(TAG, "After ButtonPress value=" + currentRingerMode);
}
//Vibrate
if(currentRingerMode == 1){
Toast.makeText(context, "Normal", Toast.LENGTH_SHORT).show();
((AudioManager) context.getSystemService(Context.AUDIO_SERVICE)).setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Log.v(TAG, "After ButtonPress value=" + currentRingerMode);
}
//Normal Mode
if(currentRingerMode == 0){
Toast.makeText(context, "Silent", Toast.LENGTH_SHORT).show();
((AudioManager) context.getSystemService(Context.AUDIO_SERVICE)).setRingerMode(AudioManager.RINGER_MODE_SILENT);
Log.v(TAG, "After ButtonPress value=" + currentRingerMode);
}
}
finally{}
}
super.onReceive(context, intent);
}
}
When you declare private int currentRingerMode;
, the default value of currentRingerMode
is 0
.
And since you are calling getRingerMode()
, apparently not from an AudioManager
object, your method
private int getRingerMode() {
// TODO Auto-generated method stub return currentRingerMode;
return currentRingerMode;
}
is called, hence the 0
all the time
UNTESTED
So first, you have to retrieve the service for Audio
AudioManager manager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
And from it, call the getRingerMode()
currentRingerMode = manager.getRingerMode();
EDIT If you are inside an activity , the following should work
private int currentRingerMode;
AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
currentRingerMode = manager.getRingerMode();
EDIT 2
In your onUpdate
, try this
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Intent intent = new Intent(context, DoNotDisturbWidget.class);
intent.setAction(ACTION_WIDGET_RECEIVER);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.button_one, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, views);
AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
currentRingerMode = manager.getRingerMode();
Log.d(TAG, "ringerMode value=" + currentRingerMode);
}
Also , look at the LogCat and make sure you have the permission on AUDIO.
精彩评论