我想获得收到的intent
的包名称和类名,但我无法得到它。
我想让我的应用程序安全,因此在卸载前要求输入密码。只有安装了应用程序的用户才知道密码,因此只有他/她才能卸载该应用程序。
我的Receiver代码:
public class PackageReceiver extends BroadcastReceiver {
@ Override
public void onReceive (Context context, Intent intent) {
if (intent.getAction().equals("android.settings.APPLICATION_DETAILS_SETTINGS")) {
/ / TODO:
//I want here to get this getAction working and then I want to fetch package and class of the intent
}
}
}
清单:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<Application
android: icon = "@ drawable / ic_launcher"
android: label = "Test">
<Receiver android: name = ". PackageReceiver"
android: label = "@ string / app_name">
<intent-filter>
<action android:name="android.settings.APPLICATION_DETAILS_SETTINGS" />
<data android:scheme="package" />
</ Intent-filter>
</ Receiver>
</ Application>
如果我遗漏任何许可,请告诉我,因为我无法正常工作。
答案 0 :(得分:0)
我个人认为这种行为很烦人。而且它确实是多余的:还有其他机制可以解决同样的问题(屏幕锁定,加密)。
我只会在操作方面使用额外的支票(即:删除帐户,更改电子邮件等)。
如果我没有阻止你这样做here's另一篇文章,它会在类似的方向上解决同样的问题。
答案 1 :(得分:0)
当我们在设置屏幕中选择特定应用时,会触发类型为:android.intent.action.QUERY_PACKAGE_RESTART的广播,其中包含应用程序的包名称作为额外内容。我想你可以使用它来激活密码对话框。
接收者代码将是这样的:
public void onReceive(Context context, Intent intent) {
String[] packageNames = intent.getStringArrayExtra("android.intent.extra.PACKAGES");
if(packageNames!=null){
for(String packageName: packageNames){
if(packageName!=null && packageName.equals("our_app_package_name")){
//Our app was selected inside settings. Fire Password Dialog.
}
}
}
}
答案 2 :(得分:-1)
我认为intent.getExtra("com.android.settings.ApplicationPkgName")
应该有包名
答案 3 :(得分:-1)
我不知道它是否可以接受
通过从活动上下文中获取packagename来设置包
intent.setPackage(context.getPackageName());
并获取包名称
intent.getPackage()