1

최근에 알람을 나타내는 현지 알림이 Android 스튜디오의 Android 프로젝트에있는 Xamarin.Forms 프로젝트의 모든 코드가 전송되었습니다. 여기에 성공적으로 Controller 클래스지역 알림 관련 문제가 발생했습니다.

//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(); 

컨트롤러를 사용하여

하는 알람을 만들고 다음과 자 마린 프로젝트에서 잘 작동하지만, 안드로이드 프로젝트에서 발생하지 않습니다으로 일정의 흐름은이 알람은 알람을 적절한 설정으로 예약하고 AlarmManager를 사용하여 적절한 트리거 시간을 설정합니다. 사용자 지정 브로드 캐스트 리시버에게

<?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> 
매니페스트

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()); 

활동 표시 할 때 경보 화재

@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(); 
... 

입니다

AlarmerReceiver

누구나 내가 여기에서 잘못 가고 왜 분노하지 않는지 분별할 수 있습니까? 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를 사용하지 않으므로 이상하게 보입니다. –

관련 문제