У меня проблема с размещением виджета цифровых часов в моей деятельности - PullRequest
0 голосов
/ 25 апреля 2020

Я занимаюсь разработкой приложения для экрана блокировки, которое отображает виджет цифровых часов приложения часов по умолчанию в android. Но иногда виджет показывает текст Loading ... , а иногда виджет показывает часы, но они слишком малы, чтобы их заметить. Я пытался использовать другие виджеты вместо цифровых часов, и все они работали как надо. У меня возникают только проблемы с размещением этого виджета.

Снимок экрана виджета с загрузкой текста
Снимок экрана виджета с часами, которые слишком малы

Вот код

public class SwipeLockScreen extends AppCompatActivity {
private static final int REQUEST_BIND_APPWIDGET = 42311;
AppWidgetHost mAppWidgetHost;
ConstraintLayout background;
FrameLayout widgetContainer;
static final int APPWIDGET_HOST_ID = 1064;
AppWidgetManager mAppWidgetManager;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_swipe_lock_screen);
    Log.d("SwipeLockScreen Says", "I'm ON");
    try {
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        try {
            this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch (Exception e) {e.printStackTrace();}
    widgetContainer=(FrameLayout)findViewById(R.id.widgetContainer);
    background=(ConstraintLayout)findViewById(R.id.swipe_lock_background);
    mAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
    mAppWidgetHost = new AppWidgetHost(getApplicationContext(), APPWIDGET_HOST_ID);
    mAppWidgetHost.startListening();
    int appWidgetId= mAppWidgetHost.allocateAppWidgetId();
    boolean success=mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId,
    new ComponentName("com.google.android.deskclock", "com.android.alarmclock.DigitalAppWidgetProvider"));
    if(success)
    {

        AppWidgetProviderInfo appWidgetInfo = null;
        try {appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
        }catch (Exception e){
            Log.d("AppWidgetInfo", "Failed to get any info");
            e.printStackTrace();}
        //Create Widget
        AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, appWidgetInfo);
        //hostView.updateAppWidgetOptions();
        hostView.setAppWidget(appWidgetId, appWidgetInfo);
        widgetContainer.addView(hostView);
       // widgetContainer.addView(hostView,appWidgetInfo.minWidth,appWidgetInfo.minHeight);
    }
    else
    {
        Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, new ComponentName("com.google.android.deskclock", "com.android.alarmclock.DigitalAppWidgetProvider"));
        startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
    }
    background.setOnTouchListener(new View.OnTouchListener() {
        boolean down=false;
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction()==MotionEvent.ACTION_DOWN)
            {
                down=true;
            }
            return false;
        }
    });
}

@Override
protected void onDestroy() {
    Log.d("SwipeScreen", "Destroyed!!");
    overridePendingTransition(0, 0);
    super.onDestroy();
}
@Override
protected void onPause() {
    mAppWidgetHost.stopListening();
    super.onPause();
}
@Override
protected void onStart() {
    overridePendingTransition(0, 0);
    mAppWidgetHost.startListening();
    super.onStart();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if(resultCode==RESULT_OK)
    {
        if(requestCode==REQUEST_BIND_APPWIDGET)
        {
            AppWidgetProviderInfo appWidgetInfo = null;
            try {appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,0));
            }catch (Exception e){
                Log.d("AppWidgetInfo", "Failed to get any info");
                e.printStackTrace();}
            //Create Widget
            AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,0), appWidgetInfo);
            //hostView.updateAppWidgetOptions();
            hostView.setAppWidget(data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,0), appWidgetInfo);
            widgetContainer.addView(hostView,appWidgetInfo.minWidth,appWidgetInfo.minHeight);
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

}

...