2011-07-19 62 views
2

我試圖讓所有安裝的應用程序使用intentsbroadcast receiver,但問題是我從來沒有指向我的onReceive方法,所以沒有得到任何包名稱。我使用下面的代碼:爲什麼我沒有收到安裝的應用程序廣播?

KillAppBCR.java

public class KillAppBCR extends Activity { 
private static final String TAG = "BroadcastReceiver"; 

BroadcastReceiver receiver; 

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

    IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); 

    receiver = new TestBroadcastReceiver(); 

    registerReceiver(receiver, filter); 

    Log.e(TAG, "onCreate"); 
    Toast.makeText(KillAppBCR.this,"onCreate",Toast.LENGTH_SHORT).show(); 

} 

TestBroadcastReceiver.java

public class TestBroadcastReceiver extends BroadcastReceiver 
{ 
private static final String TAG = "TestBroadcastReceiver"; 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    String actionStr = intent.getAction(); 

    Log.e(TAG, "onReceive"); 
    Toast.makeText(context,"onReceive",Toast.LENGTH_SHORT).show(); 


    if (Intent.ACTION_PACKAGE_ADDED.equals(actionStr)) { 

     Uri data = intent.getData(); 

    } 
} 
} 

AndroidManifest.xml中

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

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".KillAppBCR" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
<receiver android:name=".TestBroadcastReceiver"> 
    <intent-filter> 
    <action android:name="com.KillAppBCR" /> 
    </intent-filter> 
</receiver> 
</application> 
</manifest> 

登錄貓

07-19 18:39:48.768: ERROR/BroadcastReceiver(512): CC 

07-19 18:39:49.008: INFO/ActivityManager(58): Displayed activity com.KillAppBCR/.KillAppBCR: 685 ms (total 685 ms) 

07-19 18:39:54.338: DEBUG/dalvikvm(121): GC_EXPLICIT freed 259 objects/12032 bytes in 157ms 

07-19 18:42:58.943: DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol 

07-19 18:47:58.989: DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol 

問題出在哪裏?請幫助我,我想收到所有安裝的應用程序的廣播。

感謝

+0

那麼,如果你在清單中註冊接收器會發生什麼,如果沒有你的程序運行,它不應該觸發。然後,您只需將已安裝的應用程序添加到可在您使用應用程序時閱讀的列表中。 – 2011-07-19 17:08:42

回答

3

爲什麼你的活動代碼很可能不起作用:你跟registerReceiver只能暫時登記接收器。因此,Android在關閉活動後會再次殺死您的接收器。

你需要做的是在你的AndroidManifest.xml中用android.intent.action.PACKAGE_ADDED代替com.KillAppBCR。這告訴Android永久註冊您的接收器。

+0

我試過了,但它仍然沒有指示我使用onReceive方法。 – Syed

0

我認爲你必須確保你的應用程序不僅僅是一個GUI,也許它應該有一個服務組件,它可以記錄所有正在進行的安裝。恕我直言,你只是想閱讀新的安裝,對吧?因爲這就是代碼應該做的事情,但正如TomTasche指出的那樣,顯然你的應用程序將會被殺死,如果你離開它。一旦你的申請死了,什麼都不是,納達。沒有意圖,沒有通知,簡單。

+0

既不是在新安裝的應用程序的情況下,也不顯示所有當前的應用程序(ALL_APPS而不是ACTION_PACKAGE_ADDED)此代碼調用onReceive方法。 – Syed

相關問題