3

我想获取收到的包类名intent,但无法获取。我想让我的应用程序安全,以便在卸载之前要求输入密码。只有安装了应用程序的用户知道密码,所以只有他/她可以卸载应用程序。

我的接收器代码:

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> 

如果我错过任何许可,请告诉我,因为我无法正常工作。

4

4 回答 4

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. 
            }
        }
    }
}
于 2014-06-26T06:18:59.213 回答
0

我个人认为这种行为很烦人。而且肯定是多余的:已经有其他机制可以解决相同的问题(屏幕锁定、加密)。

我只会在您进行操作时使用额外的检查(即:删除帐户、更改电子邮件等)。

如果我没有阻止你这样做,那么这里的另一篇文章按照类似的方向解决了同样的问题。

于 2014-06-22T11:06:51.673 回答
-1

我认为intent.getExtra("com.android.settings.ApplicationPkgName")应该有包名

于 2014-06-19T06:37:40.220 回答
-1

我不知道它是否可以接受

通过从活动的上下文中获取包名来设置包

intent.setPackage(context.getPackageName());

并获取包名

intent.getPackage()
于 2014-06-24T20:15:53.193 回答