Вот что я пытаюсь сделать:
В приложении будет две кнопки: одна для открытия приложения, а другая для закрытия приложения после ввода пароль. Это приложение не должно позволять пользователю открывать какие-либо другие приложения.
Что я сделал:
Я могу создать приложение, которое можно включить в список Безопасность > Администраторы устройств в Android. Но приложение вылетает, когда я его открываю.
Я понимаю, что для внесения в белый список необходимого приложения необходимо получить доступ к диспетчеру политики устройства, и для этого приложение должно быть администратором устройства, и для приложение должно быть администратором устройства, в манифесте должно быть указано разрешение MANAGE_DEVICE_ADMINS. Кроме того, в этом приложении должен быть зарегистрирован класс, унаследованный от DeviceAdminReceiver (в Android SDK).
Я использовал следующее, чтобы получить эквивалентные классы Delphi для DeviceAdminReceiver.
Код: Выделить всё
java2op -classes android.app.admin.DeviceAdminReceiver -unit untDeviceAdminReceiver
Код: Выделить всё
Код: Выделить всё
unit untMain;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, untDeviceAdminReceiver,
Androidapi.JNI.Embarcadero, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText,
AndroidAPI.Helpers, FMX.Controls.Presentation, FMX.StdCtrls;
type
TMyReceiver = class (TJDeviceAdminReceiver)
public
constructor Create;
procedure onEnabled(context: JContext; intent: JIntent); cdecl;
procedure onDisabled(context: JContext; intent: JIntent); cdecl;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private-Deklarationen }
FMyListener : TMyReceiver;
FDeviceAdminReceiver : JDeviceAdminReceiver;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
{ TMyReceiver }
constructor TMyReceiver.Create;
begin
try
inherited create;
Except on E : Exception do
begin
end;
end;
end;
procedure TMyReceiver.onDisabled(context: JContext; intent: JIntent);
begin
try
Except on E : Exception do
begin
end;
end;
end;
procedure TMyReceiver.onEnabled(context: JContext; intent: JIntent);
begin
try
Except on E : Exception do
begin
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Filter: JIntentFilter;
begin
try
FMyListener := TMyReceiver.Create;
FDeviceAdminReceiver := TJDeviceAdminReceiver.JavaClass.init;
TAndroidHelper.Context.getApplicationContext.registerReceiver(FDeviceAdminReceiver, Filter);
Except on E : Exception do
begin
showMessage(E.Message);
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
try
TAndroidHelper.Context.getApplicationContext.unregisterReceiver(FDeviceAdminReceiver);
Except on E : Exception do
begin
showMessage(E.Message);
end;
end;
end;
end.
"К сожалению, DevicdAdmin01 остановлен".
Ниже приведены журналы этого приложения из отчета об ошибке.
Код: Выделить всё
09-18 00:33:27.234 24211 24211 E AndroidRuntime: FATAL EXCEPTION: main
09-18 00:33:27.234 24211 24211 E AndroidRuntime: Process: com.embarcadero.DeviceAdmin01, PID: 24211
09-18 00:33:27.234 24211 24211 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.embarcadero.DeviceAdmin01/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.IllegalArgumentException: Unable to find native library: main
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.ActivityThread.access$800(ActivityThread.java:155)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5343)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Unable to find native library: main
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.NativeActivity.onCreate(NativeActivity.java:170)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at com.embarcadero.firemonkey.FMXNativeActivity.onCreate(FMXNativeActivity.java:139)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:6010)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
09-18 00:33:27.234 24211 24211 E AndroidRuntime: ... 10 more
09-18 00:33:27.238 861 876 W ActivityManager: Force finishing activity 1 com.embarcadero.DeviceAdmin01/com.embarcadero.firemonkey.FMXNativeActivity
Я буду очень признателен за вашу помощь в исправлении этой проблемы..
Подробнее здесь: https://stackoverflow.com/questions/580 ... ption-unab