0

着信を検出するプログラムを実行しています。アプリがサイレント モードの場合は、一般モードに切り替わり、呼び出し音が鳴ります。ブロードキャスト受信機を使用して着信を聞いていたので、そこからサービスが開始されました。

私が使用している放送受信機は

    public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

    switch (am.getRingerMode()) {
        case AudioManager.RINGER_MODE_SILENT:
            Log.i("MyApp","Silent mode");
            Intent IncomingNumberIntent = new Intent(context,RingOnSilent.class);  
  //             IncomingNumberIntent.putExtra("PhoneNumber", phonenumber);
             context.startService(IncomingNumberIntent); 
            break;
        case AudioManager.RINGER_MODE_VIBRATE:
            Log.i("MyApp","Vibrate mode");
            break;
        case AudioManager.RINGER_MODE_NORMAL:
            Log.i("MyApp","Normal mode");
            break;
    }
}  

そこからサービスが始まり、

     @Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
  @SuppressWarnings("deprecation")
 @Override
  public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
super.onStart(intent, startId);
}

問題は、インストール後初めて通常に切り替わるが、鳴らないことです。でもその後鳴る。誰でも何が問題なのか教えてもらえますか?

4

1 に答える 1

0

サービスで最初に「super」を呼び出す必要があるかもしれません。このような:

    @SuppressWarnings("deprecation")
    @Override
    public void onStart(Intent intent, int startId) {
      // TODO Auto-generated method stub
      super.onStart(intent, startId); 
      am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
      am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
    }

そうしないと、他のものを呼び出すときに、サービスがまだ準備できていない可能性があります。親クラスからのものを「初期化」するには、常に Super を最初に呼び出す必要があります。

于 2013-03-07T09:16:41.970 に答える