2016-04-14 9 views
0

Ich versuche, einige einfache BroadcastReceiver nach Handbüchern zu erstellen, aber ich kann es nicht funktionieren. Ich rufe Verfahren setalarm in onCreate Funktion in MainActivity die wie folgt aussieht:BroadcastReceiver funktioniert nicht

private void setAlarm() { 
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); 
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0); 
manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000, pendingIntent); 
} 

Es sollte etwas AlarmReceiver aktivieren, tut eine Aktion tun sollten aber nicht. Es sieht wie folgt aus:

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "I'm running", Toast.LENGTH_LONG).show(); 
    notifikace(context); 
    } 

public void notifikace(Context context) { 
    NotificationCompat.Builder mBuilder = new  NotificationCompat.Builder(context); 
    mBuilder.setSmallIcon(R.drawable.notifikace); 
    mBuilder.setContentTitle("Notification Alert, Click Me!"); 
    mBuilder.setContentText("aaa"); 
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(2, mBuilder.build()); 
    } 
} 

Ich vermute, dass ich etwas in AndroidManifest bin fehlt, aber ich weiß nicht, was. AndroidManifest sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

<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=".Nastaveni" 
     android:label="@string/title_activity_nastaveni" 
     android:theme="@style/AppTheme.NoActionBar" /> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

    <activity 
     android:name=".Tyden" 
     android:label="@string/title_activity_tyden" 
     android:theme="@style/AppTheme.NoActionBar"></activity> 
    <receiver android:name=".AlarmReceiver" > 
    </receiver> 
</application> 

Letztlich Appliacation sollte in der Lage sein, Benachrichtigung bei bestimmten Zeit jeden Tag zu senden, auch wenn die Anwendung nicht im Moment läuft. (Ich muss dann

manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000, pendingIntent); 

Linie mit setRepeating Funktion ersetzen, aber bisher zu Testzwecken muss ich zuerst es zum Laufen zu bekommen.) Aber bisher AlarmReceiver Klasse tut nichts. Ich erhalte eine Fehlermeldung, wenn ich versuche, es zu laufen (aber die Anwendung nicht abstürzt):

04-14 11:52:54.592 1300-1354/? I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.xxx.myapplication3/com.example.xxx.myapplication.MainActivity (has extras)} from uid 10014 on display 0 
04-14 11:52:54.673 1300-1635/? I/ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.android.packageinstaller cmp=com.android.packageinstaller/.permission.ui.GrantPermissionsActivity (has extras)} from uid 10057 on display 0 

Ich bin nicht sicher, ob das Fehlerprotokoll auf diese oder etwas anderes in dem Projekt. Was mache ich falsch? Vielen Dank im Voraus für eine Antwort.

+0

Format Code/xml bitte –

+0

Haben meine Antwort Ihr Problem beheben? Als richtig markieren wenn ja bitte :) – Goofyahead

Antwort

1

Entschuldigung, ich sah später Ihren Empfänger in Manifest, Ihr Fehler ist, dass Sie eine ausstehende Absicht mit getService anstelle von getBroadcast bekommen.

ändern Sie es einfach an:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

versuchte ich es gerade jetzt :)

- bearbeitet ich dies als Referenz verlassen -

Sie haben die Empfänger irgendwie registrieren entweder nach Code oder nach XML.

Der Alarm ist eine Intent Sendung, die an einen Rundfunkempfänger geht, die Sie mit registerReceiver registriert (BroadcastReceiver, IntentFilter) oder über den Tag in einer AndroidManifest.xml Datei.

Siehe:

-Pending intent - getBroadcast

-AlarmManager

-Triggering alarm and issues