在Manifest中静态注册后,Broadcast无法接收package_removed事件

时间:2014-07-10 03:38:18

标签: android broadcastreceiver

我知道statckoverflow中有类似的问题,但它们对我不起作用。

广播接收器(通过manifest.xml静态注册)在设备上安装后无法接收package_remove事件(不运行主要活动)

但是如果主要活动正在运行,接收器会工作。

在AndroidManifest.xml中静态注册broadcastreceiver,如下所示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.broadcastreceivertesting"
     android:versionCode="1"
     android:versionName="1.0" >
     <uses-sdk
         android:minSdkVersion="8"
         android:targetSdkVersion="18" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"
         android:theme="@style/AppTheme" >

        <activity
             android:name="com.example.broadcastreceivertesting.MainActivity"
             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="com.example.broadcastreceivertesting.PackageBroadcastReceiver" >
             <intent-filter>
                 <action android:name="android.intent.action.PACKAGE_REMOVED" />
                 <data android:scheme="package" />
             </intent-filter>
         </receiver>

     </application>
 </manifest>

PackageBroadcastReceiver作为接收者如下:

public class PackageBroadcastReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        final String action = intent.getAction();

        if (Intent.ACTION_PACKAGE_REMOVED.equals(action))
        {
            File file = new File("/storage/sdcard0/zzz/yyy");
            if (file.exists())
            {
                file.delete();
            }
            boolean createDir = new File("/storage/sdcard0/zzz/").mkdirs();
            Log.d("XXX", "XXXX createDir=" + createDir);
            try
            {
                file.createNewFile();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
}

我错过了什么吗?

1 个答案:

答案 0 :(得分:-1)

尝试更改此内容......

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

到此......

<intent-filter>
            <action android:value="android.intent.action.PACKAGE_REMOVED" /> 
            <scheme android:value="package" />     

有关详细信息,请参阅接收包广播意图的此链接...

https://groups.google.com/forum/#!topic/android-developers/aX5-fMbdPR8

相关问题