我有一个简单的应用程序,可以将静音模式切换为正常,反之亦然。但问题是我只需拖动通知托盘即可将模式从静音更改为正常,我希望其中的音量图标也可以更改为正常图标。
当我拉下托盘通知时,应用程序进入哪种状态?
现在当我从托盘点击静音到正常模式时,我应该使用哪种方法来反映更改。
uiupdate
我尝试了callinf updateUI方法onResume但是没有;因为应用程序似乎没有暂停,所以似乎没有用。
MainActivity.java
package com.example.manis.silentmodetoggle;
import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class MainActivity extends Activity {
private AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("myTest","called onCreate");
setContentView(R.layout.activity_main);
//reference to the audio manager
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
FrameLayout contentView = (FrameLayout) findViewById(R.id.content);
updateUi();
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RingerHelper.performToggle(audioManager);
updateUi();
}
});
}
private void updateUi(){
ImageView imageView = (ImageView) findViewById(R.id.imageView);
//Set The PhoneImage
int phoneImage =RingerHelper.isPhoneSilent(audioManager) ? R.drawable.noaudio_96: R.drawable.highvolume_96 ;
imageView.setImageResource(phoneImage);
}
@Override
protected void onStart() {
super.onStart();
Log.v("myTest","Called onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.v("myTest","Called onResume");
updateUi();
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.v("myTest","Called onPostResume");
}
@Override
protected void onPause() {
super.onPause();
Log.v("myTest","Called onPause");
}
}
package com.example.manis.silentmodetoggle;
import android.media.AudioManager;
public class RingerHelper {
private RingerHelper(){};
public static void performToggle(AudioManager audioManager)
{
//if the phone is currently silent then set ot normal
//if normal then set to silent
audioManager.setRingerMode(
isPhoneSilent(audioManager)? AudioManager.RINGER_MODE_NORMAL : AudioManager.RINGER_MODE_SILENT
);
}
public static boolean isPhoneSilent(AudioManager audioManager){
return audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT;
}
}
ps:这是来自傻瓜书的Android App开发的示例应用程序。
答案 0 :(得分:1)
拖动或拉起通知托盘时没有任何直接回调。它意味着与应用程序分离。话虽这么说,你可能会尝试一些事情。
首先,您可以编写一个定期轮询振铃状态的服务。不是理想的解决方案,但这肯定会奏效。
其次,您可以尝试实施onWindowFocusChanged(),如下所示:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) {
// check ringer status
}
}
如果您希望能够以编程方式从应用程序中展开状态栏,则可以包含此权限:
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />