2014-06-13 106 views
12

我想在特定时间每天更改我的铃声音量。我使用日历来指定时间,并且我试图使用alarmManager来执行它。这是我的。 (我是noobie去容易对我)android日程安排任务在特定时间每天执行

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

是什么你的代码有错? – Raghunandan

+0

我忘了添加它,基本上它不会设置音量在我指定的时间振动。 – andyADD

+0

您有另一个活动作为当前活动的内部类。将它移动到一个单独的'.java'文件。另请参阅是否已注册广播接收器。 – Raghunandan

回答

14

要报警日常火,在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); 

在这种情况下,AlarmReceiver是广播接收器,它已经有一个背景,所以您可以直接将广播接收器的铃声模式设置为无声,而无需启动任何活动。

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

请一定要添加这些权限:

<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

谢谢你的回应,这是包含意向意图的行,它说不能解决symbole的“上下文”有什么想法是什么意思? – andyADD

+0

使用MainReceiver.this来代替上下文变量。 –

+0

谢谢,我给了它另一个镜头,但它似乎不工作,我一直在努力理解logcat为什么它不工作的意义。 – andyADD

6

如果Shivam维尔马的答案不为你工作,请确保您的接收器添加到您的清单:

<receiver android:name=".receivers.MyReceiver" /> 
相关问题