0

デバイス管理レシーバーでダイアログを作成する際に問題が発生しています。

エラー: ウィンドウを追加できません -- トークン null はアプリケーション用ではありません。

設定に保存されているパスワードを確認するダイアログを作成したいだけです。一致する場合は、デバイス管理者のチェック ボックスを無効にすることができます。それ以外の場合は終了する必要があります。

何か案は

public static class DeviceAdminSampleReceiver extends DeviceAdminReceiver {
        void showToast(Context context, String msg) {
            //String status = context.getString(R.string.admin_receiver_status, msg);
          //  Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onEnabled(Context context, Intent intent) {

            Toast.makeText(context, "Enabled", Toast.LENGTH_SHORT).show();
        }



        @Override
        public void onDisabled(Context context, Intent intent) {
            showMyDialog(context);
            Toast.makeText(context, "Disabled", Toast.LENGTH_SHORT).show();
        }


        public void showMyDialog(final Context context){
            AlertDialog dialog = null;
            SharedPreferences prefs= context.getSharedPreferences("MainPrefs", 0);
            final String tempPass = prefs.getString("password", "");

            LayoutInflater factory = LayoutInflater.from(context);
            final View deviceDialog = factory.inflate(R.layout.device_receiver_layout, null);
           final EditText input = (EditText) deviceDialog.findViewById(R.id.dialog_editText);
            Button done = (Button) deviceDialog.findViewById(R.id.button2);
            Button cancel = (Button) deviceDialog.findViewById(R.id.button1);

            AlertDialog.Builder builder = new AlertDialog.Builder(context);

            builder.setView(deviceDialog);
            builder.setCancelable(false);
            builder.setTitle("Ultimate SMS Password");
            //builder.show();
            dialog = builder.create();
            dialog.show();
            done.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if(tempPass.regionMatches(0, input.getText().toString(), 0, tempPass.length()))
                    {
                        Toast.makeText(context, "Matches", Toast.LENGTH_SHORT).show();

                    }else{
                        Toast.makeText(context, "Not Matches", Toast.LENGTH_SHORT).show();
                        //finish();

                }
                }
            });

            cancel.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Toast.makeText(context, "Exit.", Toast.LENGTH_SHORT).show();
                }
            });     
        }
4

1 に答える 1

0

非アクティビティ コンテキストでダイアログを表示することはできません。ただし、透過的なアクティビティを設計して、ダイアログのように見せ、次のようにデバイス管理から呼び出すことができます。

Intent intent = new Intent(context, YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

上記のコードで宣言された context は、DeviceAdminReceiverクラス内の任意のアクション メソッドの属性です。理解を深めるために、以下を確認してください。

@Override
public CharSequence onDisableRequested(Context context, Intent intent) {

    Intent intentcl = new Intent(context, OperationActivity.class);
    intentcl.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intentcl);
    return super.onDisableRequested(context, intent);
}
于 2015-10-13T10:57:18.123 に答える