我正在尝试使用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);
}
}
答案 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的权限。