2014-06-13 12 views
12

Ich möchte mein Klingeltonvolumen zu bestimmten Zeitpunkt jeden Tag ändern. Ich habe einen Kalender verwendet, um die Uhrzeit anzugeben, und ich versuche den AlarmManager zu benutzen, um ihn auszuführen. Hier ist was ich habe. (Ich bin ein noobie gehen einfach auf mich)Android-Zeitplan Aufgabe zu bestimmter Zeit täglich

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

Was ist falsch mit deinem Code? – Raghunandan

+0

Ich habe vergessen, es hinzuzufügen, im Grunde wird es die Lautstärke nicht zu der Zeit vibrieren, die ich angegeben habe. – andyADD

+0

Sie haben eine andere Aktivität als innere Klasse der aktuellen Aktivität. Verschieben Sie es in eine separate '.java'-Datei. Sehen Sie auch, ob Sie den Broadcastempfänger registriert haben. – Raghunandan

Antwort

14

Um Feuer täglichen Alarm, bei 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); 

In diesem Fall AlarmReceiver der Rundfunkempfänger ist, und es hat bereits einen Kontext, so Sie können den Ruftonmodus vom Broadcast Receiver aus direkt einstellen, ohne eine Aktivität zu starten.

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

Bitte achten Sie darauf, diese Berechtigungen hinzuzufügen:

<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

danke für die Antwort, die Zeile, die Intent Intent enthält, sagt es kann nicht lösen symbole 'Kontext' keine Ahnung, was sie bedeuten? – andyADD

+0

Verwenden Sie MainReceiver.this anstelle der Kontextvariablen. –

+0

Danke, ich gab es noch einmal, aber es scheint nicht zu funktionieren, ich habe versucht Logcat zu verstehen, warum es nicht funktioniert. – andyADD

6

Wenn Antwort Shivam Vermas für Sie nicht funktioniert, stellen Sie sicher, dass Sie den Receiver an Ihr Manifest hinzufügen:

<receiver android:name=".receivers.MyReceiver" /> 
Verwandte Themen