0

在我的主要活动中,我正在执行此操作:

        Calendar calendar = Calendar.getInstance();

        // 9:45 PM 
        calendar.set(Calendar.HOUR_OF_DAY, 21);
        calendar.set(Calendar.MINUTE, 45);
        calendar.set(Calendar.SECOND, 0);
        AlarmManager am = (AlarmManager) this.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        PendingIntent pi = PendingIntent.getService(this.getApplicationContext(), 0, new Intent(this.getApplicationContext(), MorningReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);

        Toast msg = Toast.makeText(NotificationScanner.this,
                "Scheduled: " + calendar.getTime(), Toast.LENGTH_LONG);
        msg.show();

这是我的接收器

public class MorningReceiver extends BroadcastReceiver { 
@Override
public void onReceive(Context context, Intent intent) {
    MediaPlayer mMediaPlayer = new MediaPlayer();
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    try {
        mMediaPlayer.setDataSource(context, alert);
        final AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
        if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
            mMediaPlayer.start();
            PackageManager packageManager = context.getPackageManager();
            Intent skype = packageManager.getLaunchIntentForPackage("com.skype.raider");
            context.startActivity(skype);
        }
    }catch(Exception e){
        Toast msg = Toast.makeText(context,
                "Exception thrown", Toast.LENGTH_LONG);
        msg.show();
    }
}

}

这是我的 AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wayward.skype.wizard"
android:versionCode="1"
android:versionName="1.0" >

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

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".SkypeActivity"
        android:label="@string/title_activity_skype" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <service android:name="com.wayward.service.NotificationScanner" >
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>
    <receiver android:name="com.wayward.service.MorningReceiver" >
    </receiver>
</application>

尝试打开 MorningReceiver 时出现此错误:

Unable to start service Intent { flg=0x4 cmp=com.wayward.skype.wizard/com.wayward.service.MorningReceiver (has extras) }: not found

有人知道我在这里声明什么错误吗?或者我做错了什么?

4

2 回答 2

1

您已声明MorningReceiver为 aReceiver并尝试将其作为Service.

系统试图找到一个Service命名MorningReceiver和失败,因此错误。

要么将其作为接收者访问,要么将其更改为服务。

如果您以接收者的身份访问它,请使用:

PendingIntent pi = PendingIntent.getBroadCast(this.getApplicationContext(), 0, new Intent(this.getApplicationContext(), MorningReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);

而不是这个:

PendingIntent pi = PendingIntent.getService(this.getApplicationContext(), 0, new Intent(this.getApplicationContext(), MorningReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);

请参阅本教程以全面了解广播接收器:

http://vogella.com/articles/AndroidBroadcastReceiver/article.html

于 2012-10-31T06:25:21.337 回答
0

采用

PendingIntent pi = PendingIntent.getBroadCast(this.getApplicationContext(), 0, new Intent(this.getApplicationContext(), MorningReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);

而不是这个

PendingIntent pi = PendingIntent.getService(this.getApplicationContext(), 0, new Intent(this.getApplicationContext(), MorningReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
于 2012-10-31T08:11:19.423 回答