4

こんにちは、アプリケーションを分析できるように、インストールされているアプリケーションを検出しようとしています。スタックオーバーフローで見つけたこの例を使用して、現在のアプリケーションからのパッケージのインストールをリッスンしていますが、logcat では何も起きていません。

void registerReceiver() {
    IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
    filter.addDataScheme("package");

}

public void onReceive(Context context, Intent intent) {
    String actionStr = intent.getAction();
    if (Intent.ACTION_PACKAGE_ADDED.equals(actionStr)) {
        Uri data = intent.getData();
        String pkgName = data.getEncodedSchemeSpecificPart();
        //handle package adding...
        Log.i("Logging Service", pkgName);

    }

}

<receiver android:name="RealTimeActivity">
    <intent-filter>
   <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.PACKAGE_ADDED"  />
    <action android:name="android.intent.action.PACKAGE_CHANGED" />
    <action android:name="android.intent.action.PACKAGE_INSTALL" />
    <action android:name="android.intent.action.PACKAGE_REMOVED" />
    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    </intent-filter>
 </receiver>


<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
4

1 に答える 1

3

Android 3.1 以降のブロードキャスト動作の変更により、アプリのインストール/削除インテントを受け取る前に、アプリを起動する必要があります。このスレッドでカブコの答えを参照してください。

次の受信機は、Android 4.0 デバイスで動作します (アプリでアクティビティがあり、最初にアクティビティを開始します。つまり、アプリも起動すると、受信機はブロードキャストを受信できます)。

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_CHANGED" />
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>

(一部のアプリは、特定のブロードキャストを受信できるように、アプリのプロセスを維持するためにダミーのスティッキー サービスを実行します)

于 2012-10-11T09:03:38.787 に答える