Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在设备重新启动时使用Alarmmanager在android中发出本地通知_Android_Android Notifications_Alarmmanager - Fatal编程技术网

在设备重新启动时使用Alarmmanager在android中发出本地通知

在设备重新启动时使用Alarmmanager在android中发出本地通知,android,android-notifications,alarmmanager,Android,Android Notifications,Alarmmanager,我已经创建了一个本地通知,并在mainactivity中触发了它 主要活动代码如下: import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; impo

我已经创建了一个本地通知,并在mainactivity中触发了它

主要活动代码如下:

import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {
    public static final String NOTIFICATION_CHANNEL_ID = "10001";
    private final static String default_notification_channel_id = "default";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //here i create and call the notification, it will trigger every 30 seconds or so
        scheduleNotification(getNotification("30 second delay"), 30000);
    }

    public void scheduleNotification(Notification notification, int delay) {
        //here is the intent which uses the MyNotificationPublisher.class
        Intent notificationIntent = new Intent(this, MyNotificationPublisher.class);

        notificationIntent.putExtra(MyNotificationPublisher.NOTIFICATION_ID, 1);
        notificationIntent.putExtra(MyNotificationPublisher.NOTIFICATION, notification);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        long futureInMillis = SystemClock.elapsedRealtime() + delay;
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        assert alarmManager != null;
        //here i am starting the alarm manager with setInexactRepeating to continuesly run the notification every 30 seconds
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, futureInMillis, 3000 * 10, pendingIntent);;

    }

    public Notification getNotification(String content) {
        //here i setup the notification
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, default_notification_channel_id);
        builder.setContentTitle("Scheduled Notification");
        builder.setContentText(content);
        builder.setSmallIcon(R.drawable.ic_launcher_foreground);
        builder.setAutoCancel(true);
        builder.setChannelId(NOTIFICATION_CHANNEL_ID);
        return builder.build();
    }
}
下面是MyNotificationPublisher类的代码:

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import static app.tutorialspoint.com.notifyme.MainActivity.NOTIFICATION_CHANNEL_ID;

public class MyNotificationPublisher extends BroadcastReceiver {

    public static String NOTIFICATION_ID = "notification-id";
    public static String NOTIFICATION = "notification";
    public void onReceive(Context context, Intent intent) {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = intent.getParcelableExtra(NOTIFICATION);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
            assert notificationManager != null;
            notificationManager.createNotificationChannel(notificationChannel);
        }
        int id = intent.getIntExtra(NOTIFICATION_ID, 0);
        assert notificationManager != null;
        notificationManager.notify(id, notification);
    }
}
这是存在接收方.MyNotificationPublisher的清单xml

<? xml version = "1.0" encoding = "utf-8" ?>
<manifest xmlns: android = "http://schemas.android.com/apk/res/android"
   package= "app.tutorialspoint.com.notifyme" >
   <uses-permission android :name = "android.permission.VIBRATE" />
   <application
      android :allowBackup = "true"
      android :icon = "@mipmap/ic_launcher"
      android :label = "@string/app_name"
      android :roundIcon = "@mipmap/ic_launcher_round"
      android :supportsRtl = "true"
      android :theme = "@style/AppTheme" >
      <activity android :name = ".MainActivity" >
         <intent-filter>
            <action android :name = "android.intent.action.MAIN" />
            <category android :name = "android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
      <receiver android :name = ".MyNotificationPublisher" />
   </application>
</manifest>

在“设备重新启动时启动警报”部分,但我不知道如何再次启动警报和通知,因为每次设备关闭时,所有活动警报都会被取消。我尝试使用“android.permission.RECEIVE_BOOT_COMPLETED”作为我在的网页的指示,然后使用MainActivity mActivity=new MainActivity()调用public void scheduleNotification(通知通知通知,int delay);mActivity.scheduleNotification(mActivity.getNotification(“30秒延迟”),30000);
来自MyNotificationPublisher类,但应用程序崩溃。)

有什么想法或解决方案吗?

您需要在清单文件中为接收者添加意图过滤器。 请尝试下面的代码

<receiver android :name = ".MyNotificationPublisher">
   <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
   </intent-filter>
</receiver> 


您正在参考第二个问题。我已经做了你的建议。它在设备重新启动后运行,但问题是我无法从MyNotificationPublisher类创建通知和alarmmanager。它会使应用程序崩溃。你能发布错误日志以便更清楚吗