2012-11-05 65 views
0

我想,當我的應用程序在後臺播放一些語氣和我按收到「相機」該按鈕我做這個簡單的步驟按鍵。廣播接收器不會對相機按鈕

  1. 創建BroadcastReceiver

    public class CameraButtonListener extends BroadcastReceiver { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
         ToneGenerator tone = new ToneGenerator(AudioManager.STREAM_DTMF, 100); 
         tone.startTone(0,2000); 
         abortBroadcast(); 
        } 
    } 
    
  2. onCreate梅索德註冊BrodcastReceiver

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
        MediaButtonBrodcastReceiver receiver = new MediaButtonBrodcastReceiver();   
        IntentFilter filter = new IntentFilter(Intent.ACTION_CAMERA_BUTTON); 
        filter.setPriority(25645895); 
        registerReceiver(receiver,filter);  
    } 
    
  3. 將brodcast接收器添加到android清單。

    <receiver android:enabled="true" android:exported="true" android:name=".CameraButtonListener"> 
    <intent-filter android:priority="25645895"> 
        <action android:name="android.intent.action.CAMERA_BUTTON" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    

後我啓動我的應用程序,然後按菜單鍵,應用程序轉到後臺,我按下相機按鈕並沒有什麼heppens後,只有相機應用程序被打開。也許我做錯了什麼或者我錯過了什麼?

我使用的是Android 2.3.4操作系統版本的索尼愛立信XPeria Arc手機。

+0

您是否嘗試過將接收器放入服務中?活動不會長期在後臺進行,你不能指望它在接收到信號後不再有前景...... – Joel

+0

@Joel no我該怎麼做? –

+0

@Joel我讀過一些帖子,人們做了這樣的事情,並且代碼運行良好,如果在活動中沒有辦法做到這一點,我最終要使用Service。 –

回答

1

如果您使用的是第3步,請刪除<receiver>元素中的<category>元素。該廣播可能沒有類別 - 您通常只會看到用於startActivity()Intent對象上的類別。

請注意,您的第2步沒有指定一個類別爲IntentFilter,這很好。

+0

@CommonWare我認爲我的手機還沒有支持相機按鈕,所以我打開音量按鈕,其工作,還有一個問題,當手機正在睡覺時,我可以接收音量降和事件?非常感謝 !!!你是最棒的 !!! –

+0

這是我的問題。 http://stackoverflow.com/questions/13248826/receive-volume-key-press-events-when-phone-is-in-deep-sleep –

0

在這裏,請閱讀Android Services。如果您希望應用程序在後臺繼續執行任務,則使用服務。在這種情況下,即使您的應用程序當前不在前臺,您也想知道什麼時候會發生什麼情況。這是如何做到這一點。

+0

您認爲這對我有幫助嗎?或在我的情況下工作? –

+0

如果您希望在應用程序處於後臺時收到通知,則需要執行此操作。 – Joel