2013-04-23 112 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> 

廣播接收器不工作,沒有做任何日誌,請幫我解決這個問題。

+0

檢查http://stackoverflow.com/a/9478013/1777090 – 2013-04-23 04:40:08

+0

請使用任何其他服務Regitser。留言已收到或來電。請檢查LOg。 – 2013-04-23 04:42:19

+0

檢查這一個可能幫助完全爲你http://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen-off – nilkash 2013-04-23 04:52:05

回答

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 2013-04-23 05:45:51

+0

你把這個廣播叫做「服務」 – kavya 2013-04-23 08:09:38

+0

kk thnx我做了它,但是當我關閉應用程序時n試圖屏蔽掉n不能正常工作,所以我檢查手機上的運行服務n顯示沒有我做的服務,那麼你能幫助4嗎? – user2290872 2013-04-23 12:09:16

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 2013-04-23 05:46:25

+0

你把這個廣播叫做「服務」 – kavya 2013-04-23 08:08:35

0

如果你想要這個接收器被系統調用,你需要導出它。你設置了exported =「false」,將其改爲true或者完全移除導出,這將開始工作。通常情況下這是不安全的,但由於SCREEN_ON和SCREEN_OFF都是受保護的廣播,並且您驗證了操作,所以只有更多可信的系統代碼可以將它們發送給您,因此它非常安全。

可悲的是,這不會在這種情況下工作,因爲意圖廣播具有以下標誌: Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND