Вот несколько файлов из исходного кода моего приложения:
класс обслуживания:
Код: Выделить всё
public class PowerService extends AccessibilityService {
private void guaranteeAccessibilityService() {
Context context = this;
// Checks if accessibility permission is enabled
AccessibilityManager am = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
List enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
for (AccessibilityServiceInfo service: enabledServices) {
ServiceInfo si = service.getResolveInfo().serviceInfo;
if (si.packageName.equals(context.getPackageName()) && si.name.equals(PowerService.class.getName())) {
System.out.println("App has accessibility permission");
return;
}
}
// Otherwise...
System.out.println("App does not have accessibility permission");
Intent i = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
private void lock() {
performGlobalAction(AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN);
}
private void powerMenu() {
performGlobalAction(AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int cmd = intent.getIntExtra("cmd", -1);
switch (cmd) {
case 0:
lock();
break;
case 1:
powerMenu();
break;
default:
System.out.println("No command was passed!");
}
return AccessibilityService.START_STICKY;
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
@Override
public void onCreate() {
super.onCreate();
System.out.println("Serviço criado!");
guaranteeAccessibilityService();
}
}
Код: Выделить всё
public class Lock extends AppWidgetProvider {
public static final String ACTION_WIDGET_CLICKED = "ActionWidgetClicked";
private void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.lock);
Intent intent = new Intent(context, getClass());
intent.setAction(ACTION_WIDGET_CLICKED);
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
views.setOnClickPendingIntent(R.id.buttonLock, pIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_WIDGET_CLICKED.equals(intent.getAction())) {
System.out.println("Widget button clicked!");
Intent i = new Intent(context, PowerService.class);
i.putExtra("cmd", 0); // PowerService.powerOff()
context.startForegroundService(i);
}
super.onReceive(context, intent);
}
@Override
public void onEnabled(Context context) {
System.out.println("Widget created!");
}
}
Код: Выделить всё
Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/791 ... tings-menu