2017-11-18 1 views
1

Dies ist meine erste Anwendung und ich versuche, die Alarm manager mit BroadcastReceiver zu arbeiten.Alarmmanager mit BroadcastReceiver

Ich rufe die Funktion "SetFutureStartTime()" mit der Zeit, die ich die Alarm manager auslösen soll onReceive(). aber wenn die Zeit kommt, haps nichts mehr.

Dieser th-Code ist:

public void SetFutureStartTime(int startHour, int startMin) 
{ 
    Context context = this; 

    m_alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, AlarmReceiver_SendOn.class); 
    intent.setAction("Broadcast"); 
    m_alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

    // Set the alarm to start at 21:32 PM 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, startHour); 
    calendar.set(Calendar.MINUTE, startMin); 

    m_alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), m_alarmIntent); 
} 

public class AlarmReceiver_SendOn extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     SendTcpMessage(TURN_ON_COMMAND); //I put here break point but nothing happens 
    } 
} 

Dies ist das Ende von manifast:

..... 
</activity> 
    <receiver android:name=".MainActivity$AlarmReceiver_SendOn"> 
     <intent-filter> 
      <action android:name="Broadcast"> 
      </action> 
     </intent-filter> 
    </receiver> 
</application> 

Was bin ich?

+0

Ist 'AlarmReceiver_SendOn' eine innere Klasse Ihres' MainActivity' wie das, was im Manifest gezeigt wird? –

+0

Hallo, ja .. es innerhalb der 'MainActivity' – user1673206

+0

Wenn Sie möchten, dass die Receiver-Klasse eine geschachtelte Klasse sein soll, muss es' public static' sein. –

Antwort

1

dieser Code funktioniert für mich: dieses MainActivity

public class MainActivity extends AppCompatActivity { 

    private AlarmManager m_alarmMgr; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
      SetFutureStartTime(19, 25); 
    } 

    public void SetFutureStartTime(int startHour, int startMin) 
    { 
     Context context = this; 

     m_alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, com.asb.test.testapplication.AlarmReceiver_SendOn.class); 
     PendingIntent m_alarmIntent = PendingIntent.getBroadcast(context, (int) System.currentTimeMillis(), intent, 0); 

     // Set the alarm to start at 21:32 PM 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, startHour); 
     calendar.set(Calendar.MINUTE, startMin); 

     m_alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), m_alarmIntent); 
    } 

} 

dies AlarmReceiver_SendOn

public class AlarmReceiver_SendOn extends BroadcastReceiver 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      Log.i("TAG", "Started >>>>>>>"); 
      //and doing something 

     } 
    } 

diese AndroidManifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.asb.test.testapplication"> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <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=".AlarmReceiver_SendOn"> 
     </receiver> 

    </application> 
</manifest> 
Verwandte Themen