1

最近、AndroidスタジオのAndroidプロジェクトにアラームを表すローカル通知を持つXamarin.Formsプロジェクトからすべてのコードを転送しました。このアラームをスケジュールの流れは以下のようになるとXamarinプロジェクトにうまく働いていたが、Androidのプロジェクトでは発生しません。ローカル通知に関する問題

はコントローラが正常に

//Get the time in string format with the meridian 
    SimpleDateFormat timeFormatter = new SimpleDateFormat("hh:mm"); 
    String timeString = timeFormatter.format(new Date(oneTimeAlarm.getTime())); 
    SimpleDateFormat meridianFormatter = new SimpleDateFormat("a"); 
    String meridianString = meridianFormatter.format(new Date(oneTimeAlarm.getTime())); 

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, AlarmReceiver.class); 

    //Provide Settings 
    intent.putExtra("Vibrate", alarm.getVibrateOn()); 
    intent.putExtra("Id", alarm.getId()); 
    intent.putExtra("Snooze", alarm.getSnoozeLength()); 
    intent.putExtra("Time",timeString); 
    intent.putExtra("Meridian",meridianString); 
    intent.putExtra("Uri", alarm.getRingtoneURI()); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarm.getTime(),pendingIntent); 

    Toast.makeText(context,"Alarm Scheduled!",Toast.LENGTH_SHORT).show(); 

Controllerクラスを使用して、ここでアラームを作成します。アラームを適切な設定でスケジュールし、AlarmManagerを使用して適切なトリガ時間を設定します。

ときアラーム火災が

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    Window window = this.getWindow(); 

    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    //window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    window.addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 


    setContentView(R.layout.activity_alarm); 


    initialize(); 
... 

示すカスタムBroadcastReceiver

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent){ 

    //Get values for alarm 
    Boolean vibrate = intent.getBooleanExtra("Vibrate",false); 
    String ringtoneURI = intent.getStringExtra("Uri"); 
    int id = intent.getIntExtra("Id",0); 
    int snoozeLength = intent.getIntExtra("Snooze",5); 
    String displayTime = intent.getStringExtra("Time"); 
    String displayMeridian = intent.getStringExtra("Meridian"); 

    //If this is an update cancel the original 
    Intent cancel = new Intent("Dismiss"); 
    PendingIntent cancelPending = PendingIntent.getBroadcast(context,id,cancel,PendingIntent.FLAG_CANCEL_CURRENT); 

    //Pass parameters to AlarmActivity so it can have same settings for snooze refire. 
    Intent alarmIntent = new Intent(context,AlarmActivity.class); 
    alarmIntent.putExtra("SNOOZE",snoozeLength); 
    alarmIntent.putExtra("VIBRATE",vibrate); 
    alarmIntent.putExtra("URI",ringtoneURI); 
    alarmIntent.putExtra("ID",id); 
    alarmIntent.putExtra("TIME",displayTime); 
    alarmIntent.putExtra("MERIDIAN",displayMeridian); 

    PendingIntent pendingAlarmIntent = PendingIntent.getActivity(context,id,alarmIntent,PendingIntent.FLAG_ONE_SHOT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 

    //Build Notification 
    builder.setCategory(Notification.CATEGORY_ALARM) 
      .setSmallIcon(R.drawable.ic_home_black_24dp) 
      .setFullScreenIntent(pendingAlarmIntent,true) 
      .setContentIntent(pendingAlarmIntent) 
      .setContentTitle("NapChat Alarm") 
      .setContentText("Open Alarm") 
      .setVisibility(Notification.VISIBILITY_PUBLIC) 
      .setPriority(Notification.PRIORITY_MAX) 
    .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)) 
.setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS); 


NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    manager.notify(id,builder.build()); 

活動であるAlarmerReceiverマニフェスト

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.alarmsproject.alarmsprojectandroid"> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.SET_ALARM"/> 
<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=".Activities.LoginActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Activities.SignUpActivity" /> 
    <activity 
     android:name=".Activities.HomeActivity" 
     android:label="@string/title_activity_home" /> 

    <activity android:name=".Activities.OptionsActivity" /> 
    <activity 
     android:name=".Activities.AlarmActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:label="@string/title_activity_alarm" 
     android:theme="@style/FullscreenTheme" /> 
    <activity android:name=".Activities.CreateAlarmActivity"></activity> 

</application> 

</manifest> 

私はどこに間違っているのか、それがなぜ発火しないのかを誰でも見分けることができます。 API 26のNotificationsChannelの使用を避けるため、APIレベル25を対象にしています。通知が表示されないのはなぜですか?特に正確なコードは数か月前に働いていたからです。

+0

マニフェストも貼り付けてください –

+0

アラームが遅延する可能性があります。これはバンドルされているためです。また、ログを経由してアラームを設定しているときに、アラームが適切に設定されていることを確認しましたか? – JoxTraex

+0

はいアラームオブジェクトで時刻を保存してsetExact()メソッドで使用しているので、アラームマネージャで設定するときはutcミリ秒に変換してください。 –

答えて

1

マニフェストにレシーバを登録する必要があります。

<application ...> 
    <receiver android:name=".AlarmReceiver"></receiver> 
</application> 

あなたはXamarinプロジェクトにこのデコレータを置き、転送したときにこれを削除したことがありますか?それはXamarinでどのように働いたか説明するかもしれません。

[BroadcastReceiver(Enabled = true)] 
+0

これは間違いなく私が見逃していたものでしたが、通知はまだ発生しませんでした。私は、設定>アプリケーションと通知> MyAppで、権限セクションに「権限が要求されていません」と言いました。このアプリの通知がオンになっているにもかかわらず、それらが表示されないようにする可能性がありますか?また、私はちょうど、エミュレータの内蔵時計アプリケーションを使用してアラームをスケジュールしようとしましたが、チャンネルを使用せずに通知をスケジュールしようとしていたことを示すToastを投稿しました。デフォルトのシステムが適切なAPIを使用していないので、奇妙に思えるでしょうか? –