2014-06-13 17 views
12

Tôi muốn thay đổi âm lượng nhạc chuông của mình vào thời gian cụ thể mỗi ngày. Tôi đã sử dụng lịch để chỉ định thời gian và tôi đang cố sử dụng alarmManager để thực thi nó. Đây là những gì tôi có. (Tôi là một noobie đi dễ dàng trên tôi)nhiệm vụ lịch biểu trên Android để thực hiện vào thời gian cụ thể hàng ngày

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

là gì sai với mã của bạn? – Raghunandan

+0

Tôi quên thêm nó, về cơ bản nó sẽ không thiết lập âm lượng để rung tại thời điểm tôi chỉ định. – andyADD

+0

Bạn có một hoạt động khác là một lớp bên trong của hoạt động hiện tại. Di chuyển nó vào một tập tin '.java' riêng biệt. Cũng xem bạn đã đăng ký chương trình phát sóng hay chưa. – Raghunandan

Trả lời

14

Để cháy, báo động hàng ngày, tại 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); 

Trong trường hợp này, AlarmReceiver là Broadcast Receiver và nó đã có một bối cảnh, vì vậy bạn có thể trực tiếp thiết lập chế độ chuông để im lặng từ Broadcast Receiver mà không bắt đầu một hoạt động.

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

Hãy chắc chắn để thêm các điều khoản:

<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

cảm ơn bạn đã trả lời, dòng có chứa ý định Intent, nó nói không thể giải quyết 'bối cảnh' symbole bất kỳ ý tưởng những gì họ có ý nghĩa? – andyADD

+0

sử dụng MainReceiver. Điều này thay cho biến ngữ cảnh. –

+0

Cảm ơn bạn, tôi đã cho nó một shot nhưng nó có vẻ là không làm việc, tôi đã cố gắng để hiểu logcat để làm cho tinh thần tại sao nó không hoạt động. – andyADD

6

Nếu câu trả lời Shivam Verma của không làm việc cho bạn, hãy chắc chắn bạn thêm người nhận để biểu hiện của bạn:

<receiver android:name=".receivers.MyReceiver" /> 
Các vấn đề liên quan