2014-04-13 90 views
1

的onReceive呼叫我有代碼,如下所示的類:不工作的Android

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" /> 
<uses-permission android:name="android.permission.BOOT_COMPLETED" /> 

接收機意圖過濾器:

<receiver android:name="com.ram.tapdetector.CallManager"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

對於一些

public class CallManager extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     Log.i("onReceive","here"); 
    } 
} 

在清單權限原因,沒有什麼是從onReceive函數記錄?

我該如何解決這個問題?任何幫助將不勝感激,謝謝。

+0

我假設你在你的應用中有一個Activity,並且你至少啓動了一次? – Squonk

+0

是的,我的申請符合所有標準 –

+0

@rohfosho,您和納什實際上想要檢測哪些操作?在最後一篇文章中,它表示「看看我的手機何時被調用」。 –

回答

1

你要添加的權限

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

代替

<uses-permission android:name="android.permission.BOOT_COMPLETED" /> 

BOOT_COMPLETED。檢出文檔here

據我看到的一切應該是好的。

p.s.:如果要接收的廣播事件來電,使用許可

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

<receiver 
    android:name="com.ram.tapdetector.CallManager" 
    android:enabled="true"> 
    <intent-filter 
     android:priority="1000"> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

檢查這個漂亮的tutorial更多宣告你的意圖過濾器。

+0

onreceive函數在此之後仍然沒有被調用? –

+0

親愛的rohfosho,你能否提供一些圍繞你的'CallManager'類的代碼。我所追求的是,​​也許你在包名中有一個錯字,或者你的類是嵌套類。嵌套類必須是靜態的,你需要在清單中聲明它們稍微不同。附:見上述註釋。來電接聽者。 – Trinimon

+0

該代碼基本上存在^我想要檢測何時收到呼叫,並且我希望能夠應答/拒絕呼叫。但是onRecieve函數不會被調用,無論如何。 –

1

你需要在AndroidManifest.xml文件如下:

1)在你的元素:

`<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />` 

2)在你的元素(一定要使用完全合格的[或相對]類名稱爲您的廣播接收器):

<receiver android:name="com.example.CallManager"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

` 在MyBroadcastReceiver.java:

` package com.example; 

public class CallManager extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     Log.i("onReceive","here"); 
    } 
    }` 

如果您使用HTC mobile-

隨着

`<action android:name="android.intent.action.BOOT_COMPLETED" /> ` 

也使用,

`<action android:name="android.intent.action.QUICKBOOT_POWERON" />` 

HTC設備不似乎趕上BOOT_COMPLETED

+0

我已經使用了所有這些東西,但應用程序不起作用。我需要一個服務來使用它嗎?或者它可以沒有這個工作? –

+0

有一個問題,你用哪個手機來測試它?將您的代碼發佈到[email protected],我會查找並解決您的問題。 –

0

你有沒有試過用標誌:

android:enabled="true" 
android:exported="true"