2013-04-23 5 views
7

Я пытаюсь использовать BroadcastReceiver, но он не работает, пожалуйста, помогите мне решить эту проблему. MyReceiver.javaBroadcastReceiver для включения/выключения экрана не работает

package com.example.broadcast_receiver; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class MyReceiver extends BroadcastReceiver { 

    @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.i("[BroadcastReceiver]", "Screen ON"); 
     } 
     else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){ 
      Log.i("[BroadcastReceiver]", "Screen OFF"); 
     } 
    } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.broadcast_receiver" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="9" 
     android:targetSdkVersion="16" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <receiver android:name=".MyReceiver" 
      android:enabled="true" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.SCREEN_ON"/> 
       <action android:name="android.intent.action.SCREEN_OFF"/> 
      </intent-filter> 
     </receiver> 

     <activity 
      android:name="com.example.broadcast_receiver.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

BroadcastReceiver не работает и не делает каких-либо журнал, пожалуйста, помогите мне решить эту проблему.

+0

Проверить http://stackoverflow.com/a/9478013/1777090 –

+0

Пожалуйста, используйте любую другую услугу для регистратора. Сообщение получено или входящий звонок. Пожалуйста, проверьте LOg. –

+0

проверить это может помочь вам полностью http://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen-off – nilkash

ответ

23

Эй попробуйте использовать динамический призыв вещания, я попытался это будет угрюмой работой ...

public class MainActivity extends Activity { 

    //Create broadcast object 
    BroadcastReceiver mybroadcast = 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.i("[BroadcastReceiver]", "Screen ON"); 
      } 
      else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
       Log.i("[BroadcastReceiver]", "Screen OFF"); 
      } 

     } 
    }; 

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

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

yaa это работает, bt я хочу, чтобы это работа после закрытия моего приложения bcoz. Я делаю блокировку экрана, поэтому у вас есть идея для этого? – user2290872

+0

вы вызываете эту трансляцию внутри «сервисов» – kavya

+0

kk thnx я сделал это, но я закрыл приложение n попытался отключить n на нем, но он не работает, поэтому я проверяю запуск служб на телефоне. N показывает, что нет службы, которую я сделал , так что вы можете помочь 4? – user2290872

3

Вы можете попробовать с получением значения батареи:

public class Broadcast extends Activity { 
    //Create broadcast object 
    BroadcastReceiver mybroadcast = new BroadcastReceiver() { 

     //When Event is published, onReceive method is called 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //Get battery percentage 
      int batterylevel = intent.getIntExtra("level", 0);  
      //get progressbar 
      ProgressBar myprogressbar = (ProgressBar) findViewById(R.id.progressbar); 
      myprogressbar.setProgress(batterylevel); 
      TextView tv = (TextView) findViewById(R.id.textfield); 
      //Set TextView with text 
      tv.setText("Battery Level: " + Integer.toString(batterylevel) + "%"); 
     } 
    }); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_broadcast); 
     registerReceiver(mybroadcast, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    } 
} 
+0

yaa это работает, bt я хочу, чтобы он был работа после закрытия моего приложения bcoz Я делаю блокировку экрана, так что у вас есть идея для этого? – user2290872

+0

вы называете это трансляцией внутри «сервисов» – kavya

0

Если вы хотите этот приемник к вызывается системой, вам нужно будет экспортировать ее. Вы устанавливаете exported = "false", измените это на true или полностью экспортируете, и это начнет работать. Обычно это будет небезопасно, но поскольку как SCREEN_ON, так и SCREEN_OFF являются защищенными вещами, и вы проверяете действия, только более надежный системный код может отправлять их вам, так что это довольно безопасно.

К сожалению, это не будет работать в этом случае, поскольку трансляция намерений имеет следующие флаги: Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND