开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜