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 に答える
-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 に答える