java - 创建 Alarmobject 时应用程序崩溃 - Alarmmanager

标签 java android alarmmanager

我进行了很多搜索,但找不到我的具体问题的答案,所以我问自己的问题。

问题:

我正在编写一个应用程序,用户可以在其中设置具有不同重复间隔的多个闹钟。但是当我创建 Alarm 对象时,应用程序崩溃了。

每次用户单击按钮时,都会调用 Alarm 类:

Alarm b = new Alarm(name, intervall, 23, 30, 15, 6, 2016);

这是我的Alarm 类:

package witty.de.witty;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.net.Uri;
import android.os.IBinder;
import java.util.Calendar;

public class Alarm extends Activity {
    public Alarm(String name, int intervall, int stunden, int minuten, int tag, int monat, int jahr) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, jahr);
        cal.set(Calendar.MONTH, (monat - 1));
        cal.set(Calendar.DAY_OF_MONTH, tag);
        cal.set(Calendar.HOUR_OF_DAY, stunden);
        cal.set(Calendar.MINUTE, minuten);
        cal.set(Calendar.SECOND, 0);

        Intent myIntent = new Intent(Alarm.this, AlarmReceiver.class);

        final int _id = (int) System.currentTimeMillis();
        myIntent.setData(Uri.parse("reminder:" + _id));

        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, _id, myIntent, PendingIntent.FLAG_ONE_SHOT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), intervall * AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }
}

这是我的 NotificationService 类:

package witty.de.witty;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;

import java.util.logging.Logger;

import witty.de.witty.MainActivity;
import witty.de.witty.R;

public class NotificationService extends Service {
    private NotificationManager mManager;

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

        Toast mToast = Toast.makeText(
                this,
                "Reminders added to the calendar successfully for ",
                Toast.LENGTH_LONG);
        mToast.show();

        // Getting Notification Service
        mManager = (NotificationManager) this.getApplicationContext()
                .getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);

        Intent intent1 = new Intent(this.getApplicationContext(),
                MainActivity.class);

        intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
                | Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingNotificationIntent = PendingIntent.getActivity(
                this.getApplicationContext(), 0, intent1,
                PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("Witty2")
                        .setContentIntent(pendingNotificationIntent)
                        .setContentText("Errinerung!!");

        mManager.notify(0, mBuilder.build());
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }
}

这是我的 AlarmReceiver 类:

package witty.de.witty;

import android.app.NotificationManager;
import android.content.Context;
import android.support.v4.app.NotificationCompat;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent myIntent = new Intent(context, NotificationService.class);
        context.startService(myIntent);
    }
}

这是我的 AndroidManifest 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="witty.de.witty">

    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Erstellen"></activity>
        <activity android:name=".Impressum"></activity>
        <activity android:name=".Startseite"></activity>
        <service android:name=".NotificationService"></service>
        <receiver android:name=".AlarmReceiver" android:process=":remote"></receiver>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>

如果您需要更多代码或更多信息,请询问我。

最佳答案

我的解决方案: 使用新 Intent 而不是对象来调用 Alarm 类:

Intent intent = new Intent(this, Alarm.class);
startActivity(intent);

关于java - 创建 Alarmobject 时应用程序崩溃 - Alarmmanager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37867023/

相关文章:

android - AlarmManager:PendingIntent 在某些设备上从最近的应用程序中刷过应用程序后消失了

android - 作为业务需求,我必须让我的后台服务在我的 android 应用程序中始终运行

java - 是否有必要从 getter 方法返回一个与 Hibernate 传递给 setter 的对象不同的对象?

java - 模糊的 Java 导入语法?

java - webapp 的 Maven 原型(prototype)

android - 移动项目的 SLA(服务水平协议(protocol))

c# - 如何使用 xamarin android 访问 WCF 服务器

java - RxAndroid : Class must either be declared abstract or implement abstract method error

android字符串选择器像iphone一样显示上下限值

android - 如何在 API 19 (kitkat) 上设置精确的重复警报?