2016-04-07 6 views
1

Hier ist meine Receiver-Datei. Was ich fühle, hat kein Problem. Ich drucke nur die Art der Absicht, die übergeben wird. Gemäß mir wird onReceive nie genannt. Ich denke, es gibt ein Problem mit meinem Manifest selbst? Oder irgendwelche anderen Ideen? Der Empfänger ist mit keinem anderen Code in der Anwendung verknüpft.Warum funktioniert mein Screen On/Off BroadcastReceiver nicht?

Mein Manifest sieht auch gut aus, aber ich kann nicht herausfinden, warum es nicht funktioniert.

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="sharukh.locky" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <meta-data 
      android:name="com.google.android.geo.API_KEY" 
      android:value="AIzaSyAGufoN9huWkmw8nTskk2aaFHW1gXn1Z7Q"/> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version"/> 

     <!-- Activities --> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
     <activity android:name=".Tutorial"/> 
     <activity android:name=".TutorialSelectApp"/> 
     <activity 
      android:name=".LockScreen" 
      android:label="@string/title_activity_lock_screen" 
      android:theme="@style/AppTheme.NoActionBar"/> 

     <!-- Services --> 
     <service 
      android:name=".LockyService" 
      android:enabled="true" 
      android:exported="true"/> 

     <receiver 
      android:name=".BroadCastReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.SCREEN_OFF"/> 
       <action android:name="android.intent.action.HEADSET_PLUG"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

Ich habe keine Empfänger dynamisch hinzugefügt/registriert/nicht registriert. Ich würde hier Hilfe benötigen.

+1

beide Aktionen, die Sie Ihren Receiver für ausgestrahlt werden mit 'FLAG_RECEIVER_REGISTERED_ONLY' registriert haben, was bedeutet, dass sie nur durch dynamisch empfangen werden registrierte Empfänger. Ihre statisch registrierte Receiver-Klasse wird sie nicht bekommen. –

+0

Ihr Paketname ist "sharukh.locky" richtig? ist Ihr Rundfunkempfänger im selben Paket? –

Antwort

1

Sie können dies tun, indem dynamische Aufruf von Broadcast versuchen, wie unter

public class YourActivity extends Activity { 

    //Create broadcast object 
    BroadcastReceiver mBroadcast = new BroadcastReceiver() {  
    //When Event is published, onReceive method is called 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.i("[BroadcastReceiver]", "MyReceiver"); 

     if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      Log.d("[BroadcastReceiver]", "Screen ON"); 
     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      Log.d("[BroadcastReceiver]", "Screen OFF"); 
     } 

    } 
}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     registerReceiver(mBroadcast, new IntentFilter(Intent.ACTION_SCREEN_ON)); 
     registerReceiver(mBroadcast, new IntentFilter(Intent.ACTION_SCREEN_OFF)); 
    } 
} 
+1

Funktioniert einwandfrei, ich kannte nie das Konzept von 'FLAG_RECEIVER_REGISTERED_ONLY'. Vielen Dank. –

+0

Es sollte beachtet werden, dass es tatsächlich in [der Dokumentation für ACTION_SCREEN_OFF] (http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF) angegeben ist, dass es nicht von Empfängern empfangen werden kann, die in der Manifest. – SpaceBison