利用Inent监听应用程序的安装、替换、删除等

本文介绍如何使用Android的Intent机制监听应用程序的安装、卸载及状态变化,并实现特定Activity在开机时自动启动。
 android Intent类
分类: android_content2011-09-26 21:06 966人阅读 评论(0) 收藏 举报
androidactionschemeclassdeletestring
 
1)利用Inent监听应用程序的安装、替换、删除等
与包相关的Intent:
Intent.ACTION_PACKAGE_INSTALL
Intent.ACTION_PACKAGE_ADDED
Intent.ACTION_PACKAGE_REPLACED
Intent.ACTION_PACKAGE_REMOVED
Intent.ACTION_PACKAGE_CHANGED
Intent.ACTION_PACKAGE_RESTARTED
Intent.ACTION_PACKAGE_DATA_CLEARED
首先定义一个Broadcast类——HandlePackageAction,代码如下:
[java] view plaincopyprint?
public class HandlePackageAction extends BroadcastReceiver {  
  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if (Intent.ACTION_PACKAGE_ADDED.equals(action))   
        {  
            Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show();  
        }   
        else if (Intent.ACTION_PACKAGE_REMOVED.equals(action))  
        {  
            Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show();  
        }  
        else if (Intent.ACTION_PACKAGE_CHANGED.equals(action))   
        {  
            Toast.makeText(context, "有应用被改变", Toast.LENGTH_LONG).show();  
        }  
        else if (Intent.ACTION_PACKAGE_REPLACED.equals(action))  
        {  
            Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show();  
        }  
        else if (Intent.ACTION_PACKAGE_RESTARTED.equals(action))  
        {  
            Toast.makeText(context, "有应用被重启", Toast.LENGTH_LONG).show();  
        }   
        else if (Intent.ACTION_PACKAGE_INSTALL.equals(action))   
        {  
            Toast.makeText(context, "有应用被安装", Toast.LENGTH_LONG).show();  
        }  
    }  
  
}  


然后在AndroidManifest.xml中注册HandlePackageAction,内容如下:
 
[html] view plaincopyprint?
<receiver android:name=".HandlePackageAction"  
    android:enabled="true">  
    <intent-filter>  
        <action android:name="android.intent.action.PACKAGE_ADDED"></action>  
        <action android:name="android.intent.action.PACKAGE_CHANGED"></action>  
        <action android:name="android.intent.action.PACKAGE_REMOVED"></action>  
        <action android:name="android.intent.action.PACKAGE_REPLACED"></action>  
        <action android:name="android.intent.action.PACKAGE_RESTARTED"></action>  
        <action android:name="android.intent.action.PACKAGE_INSTALL"></action>  
        <data android:scheme="package"></data>  
    </intent-filter>  
</receiver>  


 2)安装、卸载应用程序
[java] view plaincopyprint?
Intent intent = new Intent(Intent.ACTION_VIEW);  
intent.setDataAndType(Uri.fromFile(new File("/sdcard/Test.apk")),  
        "application/vnd.android.package-archive");  
startActivity(intent); // 安装 程序  
  
Uri packageURI = Uri.parse("package:com.ygc.Test");  
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);  
startActivity(uninstallIntent);// 正常卸载程序  


 
 3)开机启动Activity
首先定义一个Broadcast类——HandleBootComplete,代码如下:
[java] view plaincopyprint?
public class HandleBootComplete extends BroadcastReceiver {  
    public void onReceive(Context context, Intent intent) {  
        Intent startActivityIntent = new Intent(context, DrawText.class);  
        startActivityIntent.setAction(Intent.ACTION_MAIN);  
        startActivityIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
        startActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
        context.startActivity(startActivityIntent);  
    }  
}  


然后在AndroidManifest.xml中注册HandleBootComplete,内容如下:
 
[html] view plaincopyprint?
<!-- 添加权限 -->  
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  
  
  
    <receiver android:name="HandleBootComplete" android:enabled="true">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
            <category android:name="android.intent.category.HOME" />  
        </intent-filter>  
    </receiver>  

<think>我们正在讨论DRC(设计规则检查)中的字符'*'的用途。在DRC规则文件中,星号(*)通常作为通配符使用,代表匹配任意字符或任意长度的字符串。这在定义规则时非常有用,特别是在处理不同层或不同对象类型时。 参考引用: - 引用[2]提到正则表达式中,正则表达式用于检索、替换符合某种模式的文本,而星号(*)在正则表达式中表示匹配前面的子表达式零次或多次。但在DRC规则中,星号的使用可能类似,但具体语法取决于DRC工具。 - 引用[3]中展示了在shell中使用点(.)表示任意一个字符,而星号(*)在正则表达式中表示匹配任意数量(包括零个)的字符。在DRC规则中,星号通常用于层名匹配或规则定义中的通配。 在DRC规则中,星号(*)的常见应用场景包括: 1. **层名通配**:在规则定义中,使用星号匹配多个层。例如,在Calibre SVRF规则中,`METAL*`可以匹配所有以METAL开头的层(如METAL1, METAL2等),从而对多层应用相同的规则。 2. **属性匹配**:在检查器件或网络的属性时,星号可以匹配任意属性值。例如,在检查特定类型的器件时,可以用`DEVICE=NMOS*`匹配所有以NMOS开头的器件类型。 3. **规则条件扩展**:在复杂的规则中,星号用于匹配任意长度的字符串,以便在条件中灵活定义模式。 例如,在Calibre SVRF规则中,我们可能会这样使用星号: ```svrf // 检查所有金属层的最小宽度 DRC CHECK METAL_WIDTH LAYER METAL* // 匹配所有金属层 WIDTH < 0.1 ABORT "METAL WIDTH < 0.1um" END ``` 另一个例子是,在定义层间规则时,使用星号匹配任意中间层: ```svrf // 检查从METAL1到顶层金属的所有通孔 VIOLATION CHECK VIA_STACK FROM METAL1 TO METAL* // 匹配METAL1到任意金属层 VIA < 1 ABORT "Missing via between layers" END ``` 需要注意的是,不同DRC工具可能有不同的语法。例如,在Altium Designer的DRC规则中,星号也可能用于匹配网络名称或对象标识符,但具体语法需参考其文档。 在Altium Designer中,设计规则检查(DRC)的规则设置中,星号(*)可能用于通配符匹配。例如,在设置网络类或元件类的规则时,可以用星号匹配所有对象。但在Altium的规则设置中,通常使用星号作为通配符来匹配字符串。例如,在设置线宽规则时,可以设置网络名为"*"来匹配所有网络。 例如,在Altium中创建一个线宽规则,适用于所有网络: 1. 在Design Rules的Width规则中,可以设置Name为"All Nets",并将网络条件设置为"InNet('*')",这样就会匹配所有网络[^1]。 因此,星号在DRC规则中的主要作用是作为通配符,提供灵活的匹配方式,使得一条规则可以应用于多个对象(层、网络、器件等)。 总结:在DRC规则中,星号(*)作为通配符,用于匹配任意字符串,从而简化规则定义,避免为每个对象重复编写规则。 相关问题: 1. DRC规则中还有哪些常用的通配符? 2. 如何在Altium Designer中设置基于通配符的设计规则? 3. 在Calibre DRC中,星号(*)与其他通配符(如问号?)有什么区别?</think>在DRC(设计规则检查)规则系统中,字符`*`(星号)作为通配符具有关键作用,主要用于实现灵活的规则匹配。以下是其在DRC中的具体应用场景和作用: ### 一、主要应用场景 1. **层名模式匹配** 在多层PCB设计中,`*`可匹配所有以特定前缀开头的信号层: ```svrf RULE METAL_WIDTH LAYER METAL* // 匹配METAL1, METAL2, METAL3等所有金属层 WIDTH > 0.1mm END ``` 此规则会同时检查所有金属层的线宽约束[^1]。 2. **网络类规则定义** 批量设置相同类型网络的规则(如所有电源网络): ```svrf RULE POWER_SPACING NET VCC* // 匹配VCC3V3, VCC5V, VCC_CORE等 SPACING > 0.2mm END ``` 3. **器件类规则覆盖** 对特定类型器件统一设置约束: ```svrf RULE CAPACITOR_CLEARANCE COMPONENT C* // 匹配C1, C2, C101等所有电容 CLEARANCE > 0.15mm END ``` ### 二、核心作用机制 1. **通配符匹配** `*`遵循正则表达式语义,表示"零个或多个任意字符"(如`METAL*`匹配`METAL`、`METAL1`、`METAL_A`等)[^2][^3]。 2. **规则继承简化** 通过`*`定义的泛化规则可自动应用于新增对象: - 新增`METAL4`层时自动继承`METAL*`的宽度规则 - 新增`VCC12V`网络自动继承`VCC*`的间距约束 3. **错误定位优化** 在DRC报告中使用`*`快速筛选错误类型: ```bash grep "METAL*_SPACE" DRC_Report.txt # 提取所有金属层间距违规 ``` ### 三、典型应用示例 1. **跨层间距检查** ```svrf // 检查所有金属层到GND层的间距 RULE METAL_GND_SPACE LAYER_PAIR METAL* : GND SPACING > 0.1mm END ``` 2. **电源网络宽度约束** ```svrf // 所有电源网络最小线宽 RULE POWER_WIDTH NET (VCC* | VDD* | GND*) // 组合匹配 WIDTH >= 0.3mm END ``` 3. **器件封装规则** ```svrf // 所有0402封装器件的焊盘间距 RULE 0402_CLEARANCE FOOTPRINT *0402* // 匹配CAP_0402, RES_0402等 PAD_SPACING > 0.1mm END ``` ### 四、使用注意事项 1. **转义特殊字符** 当需要匹配字面`*`时需转义(如`RES\*`匹配含星号的电阻名)[^3]。 2. **性能影响** 过度使用`*`会增加规则检查复杂度,建议: - 优先使用精确匹配(如`METAL1`而非`METAL*`) - 对高频规则添加作用域限制 3. **冲突解决** 当泛化规则(`METAL*`)与具体规则(`METAL1`)冲突时: - 具体规则优先级更高 - 可通过`PRIORITY`关键字显式指定 > 在Altium Designer等工具中,可通过 **Design > Rules** 界面图形化配置含`*`的规则,实时DRC检查会标记违规(如绿色高亮器件焊盘)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值