getRingerMode()始终返回值0

时间:2010-08-16 19:49:21

标签: android

我正在尝试使用getRingerMode()方法确定当前的振铃状态。

我创建了一个变量: private int currentRingerMode;

将我的变量设置为: currentRingerMode = getRingerMode();

并使用以下方法:
private int getRingerMode(){         // TODO自动生成的方法存根         return currentRingerMode;     }

但是当我用以下内容记录变量的值时: Log.v(TAG,“value =”+ currentRingerMode);

无论振铃状态如何,总是返回值0 ......我做错了什么?

感谢。

-Brian


-Update 这是我目前的完整代码。

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;

公共类DoNotDisturbWidget扩展了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);
}

}

1 个答案:

答案 0 :(得分:0)

当您声明private int currentRingerMode;时,currentRingerMode的默认值为0

由于您正在调用getRingerMode(),显然不是来自AudioManager对象,您的方法

private int getRingerMode() { 
   // TODO Auto-generated method stub return currentRingerMode; 
   return currentRingerMode;
}
调用

,因此始终0

<强> UNTESTED

首先,您必须检索音频服务

AudioManager manager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);

然后从中调用getRingerMode()

currentRingerMode = manager.getRingerMode();

修改 如果您在活动中,则以下操作

private int currentRingerMode;
AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
currentRingerMode = manager.getRingerMode();

编辑2

onUpdate中,试试这个

@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);

} 

另外,请查看LogCat并确保您拥有AUDIO的权限。