简体   繁体   English

Android AlarmManager使用铃声启动服务

[英]Android AlarmManager Start a service with ringtone

I am working on Alarm Manager. 我正在使用警报管理器。 I used a service to start and will ring a tone. 我使用了一项服务来启动,并会发出提示音。 But the service is not starting. 但是服务没有启动。 Can anyone suggest about service, Pending Intent and identify the error in my code. 任何人都可以提出有关服务,待定意图的建议,并确定我的代码中的错误。 The code is copied from net. 该代码是从net复制的。

This is my AndroidScheduledActivity.java 这是我的AndroidScheduledActivity.java

public class AndroidScheduledActivity extends Activity {

    private PendingIntent pendingIntent;

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Button buttonStart = (Button) findViewById(R.id.startalarm);

        Button buttonCancel = (Button) findViewById(R.id.cancelalarm);

        buttonStart.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                // TODO Auto-generated method stub

                Intent myIntent = new Intent(AndroidScheduledActivity.this,
                        MyAlarmService.class);

                pendingIntent = PendingIntent.getService(AndroidScheduledActivity.this,
                        0, myIntent, 0);

                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

                Calendar calendar = Calendar.getInstance();

                calendar.setTimeInMillis(System.currentTimeMillis());

                calendar.add(Calendar.SECOND, 10);

                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                        pendingIntent);

                Toast.makeText(AndroidScheduledActivity.this, "Start Alarm",
                        Toast.LENGTH_LONG).show();
                Log.d("Alarm", "Alarm Started");

            }
        });

        buttonCancel.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                // TODO Auto-generated method stub

                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

                alarmManager.cancel(pendingIntent);

                // Tell the user about what we did.

                Toast.makeText(AndroidScheduledActivity.this, "Cancel!",
                        Toast.LENGTH_LONG).show();

            }
        });

    }
}

And this is my MyAlarmService.java 这是我的MyAlarmService.java

public class MyAlarmService extends Service {

    @Override
    public void onCreate() {

        // TODO Auto-generated method stub

        Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();

    }

    @Override
    public IBinder onBind(Intent intent) {

        // TODO Auto-generated method stub

        Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();

        return null;

    }

    @Override
    public void onDestroy() {

        // TODO Auto-generated method stub

        super.onDestroy();

        Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.d("AlarmService", "Alarm Starting to ring");

        Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), alert);
        mp.setVolume(100, 100);
        mp.start();
        mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.release();
            }
        });

        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        vibrator.vibrate(400);

        Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();

        return Service.START_STICKY;

    }

    @Override
    public boolean onUnbind(Intent intent) {

        // TODO Auto-generated method stub

        Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();

        return super.onUnbind(intent);

    }

}

And my menifest.xml file 还有我的menifest.xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.alarm_basic"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.alarm_basic.AndroidScheduledActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MyAlarmService" />
    </application>

</manifest>

Also need to check wheather Ringtone is null also. 还需要检查Wheather铃声是否也为空。

 Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
 Ringtone r = RingtoneManager.getRingtone(getBaseContext(), alert);

 if(r == null){

     alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
     r = RingtoneManager.getRingtone(getBaseContext(), alert);

     if(r == null){  
         alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
         r = RingtoneManager.getRingtone(getBaseContext(), alert);               
     }
 }
if(r != null)
    r.play();

Or otherway 否则

MediaPlayer mp = MediaPlayer.create(getBaseContext(), alert);
    if(mp !=null) {    
        mp.setVolume(100, 100);
        mp.start();
        mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.release();
            }
        });
    }
Intent intent = new Intent(DashboardScreen.this, ServiceClass.class);
PendingIntent pintent = PendingIntent.getService(DashboardScreen.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);

Try it, and let me know what happen... 试试吧,让我知道会发生什么...

In your manifest.xml file 在manifest.xml文件中

 <service android:enabled="true" android:name=".ServiceClass" />
  1. Add a permission in your Manifest file 在清单文件中添加权限

     < uses-permission android:name="android.permission.VIBRATE" /> 
  2. Should check vibrator is null or not. 应检查振动器是否为空。

     Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); if (vibrator != null) vibrator.vibrate(400); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM