2014-06-13 18 views
12

Chcę zmienić głośność dzwonka o określonej porze każdego dnia. Użyłem kalendarza do określenia czasu i próbuję użyć programu alarmManager, aby go uruchomić. Oto, co mam. (Jestem noobie iść łatwo na mnie)Zadanie harmonogramu Android uruchamiane o określonej godzinie codziennie

package com.example.ringervolume.app; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

import java.util.Calendar; 


public class MainActivity extends ActionBarActivity { 


    private AudioManager audio; 
    private PendingIntent pendingIntentam; 
    private PendingIntent pentdingIntentpm; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView textViewTime = (TextView) findViewById (R.id.textTime); 
     audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

     //ringer volume for the am. 
     Calendar calendaram = Calendar.getInstance(); 

     calendaram.set(Calendar.HOUR_OF_DAY, 21); 
     calendaram.set(Calendar.MINUTE, 32); 
     calendaram.set(Calendar.SECOND, 0); 
     calendaram.set(Calendar.AM_PM,Calendar.PM); 



     Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
     pendingIntentam = PendingIntent.getBroadcast(MainActivity.this, 0,myIntent,0); 
     AlarmManager alarmManageram = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarmManageram.set(AlarmManager.RTC, calendaram.getTimeInMillis(), pendingIntentam); 


    } 

    public class MyReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
       Intent scheduledIntent = new Intent(context, myscheduleactivity.class); 
      scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(scheduledIntent); 

     } 
    } 

    public class myscheduleactivity extends Activity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
     } 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

} 
+0

Co jest źle z twoim kodem? – Raghunandan

+0

Zapomniałem go dodać, w zasadzie nie ustawi on głośności na wibracje o określonej godzinie. – andyADD

+0

Masz inną aktywność jako wewnętrzną klasę bieżącego działania. Przenieś go do osobnego pliku '.java'. Zobacz również, czy zarejestrowałeś nadajnik. – Raghunandan

Odpowiedz

14

Aby alarmu pożarowego codziennie na 21:32

private AlarmManager alarmMgr; 
private PendingIntent alarmIntent; 
... 
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, AlarmReceiver.class); 
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

// Set the alarm to start at 21:32 PM 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.set(Calendar.HOUR_OF_DAY, 21); 
calendar.set(Calendar.MINUTE, 32); 

// setRepeating() lets you specify a precise custom interval--in this case, 
// 1 day 
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     AlarmManager.INTERVAL_DAY, alarmIntent); 

W tym przypadku AlarmReceiver jest Broadcast Receiver i ma już kontekst, tak możesz bezpośrednio ustawić tryb dzwonka na cichy z odbiornika Broadcast bez uruchamiania działania.

@Override 
    public void onReceive(Context context, Intent intent) { 
     AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
     am.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
} 

Pamiętaj, aby dodać te uprawnienia:

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission> 
+0

dziękuję za odpowiedź, linia, która zawiera intencję intencji, mówi, że nie może rozpoznać symbolu "pojęcia" co to znaczy? – andyADD

+0

użyj MainReceiver.this zamiast zmiennej kontekstowej. –

+0

Dziękuję, dałem mu kolejne zdjęcie, ale wygląda na to, że nie działa, starałem się zrozumieć logcat, aby zrozumieć, dlaczego nie działa. – andyADD

6

Jeśli odpowiedź Shivam Verma nie działa dla Ciebie, upewnij się dodać odbiornik do manifestu:

<receiver android:name=".receivers.MyReceiver" /> 
Powiązane problemy