2011-07-19 7 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

したがって、受信者をマニフェストに登録すると、プログラムが実行されていなければ起動しないはずです。次に、インストールしたアプリをリストに追加して、アプリを使用するときに読むことができます。 –

答えて

3

なぜ、あなたのアクティビティコードはおそらく動作しません:あなたはregisterReceiverでのみ一時的に受信機を登録しています。あなたのアクティビティを閉じた後、Androidは受信者を再び殺します。

AndroidManifest.xmlにcom.KillAppBCRandroid.intent.action.PACKAGE_ADDEDと置き換えてください。これは、レシーバーを永久に登録するようにAndroidに指示します。

+0

私はそれを試しましたが、それでも私はonReceiveメソッドに私を指示しません。 – Syed

0

私はあなたのアプリケーションは、おそらくそれはすべてのインストールが行われて注意してください可能性がだけでなく、サービス・コンポーネントを持っている必要があり、すなわち、単にGUIを超えて動作することを確認する必要がありだと思います。あなたは新しいインストールだけを読み込もうとしていますよね? TomTascheが指摘したように、これがコードで行う必要があるため、離れて移動すると、アプリケーションが強制終了されることになります。そして、あなたのアプリケーションが死んだら、一度も、何もない。意図なし、通知なし、シンプル。

+0

新しくインストールされたアプリケーションの場合も、現在のすべてのアプリケーション(ACTION_PACKAGE_ADDEDの代わりにALL_APPS)も表示されていない場合、このコードはonReceiveメソッドを呼び出します。 – Syed

関連する問題