Поскольку вы не можете new
действие, и вы не должны содержать ссылку stati c на действие для вызова этого метода (поскольку это может привести к утечкам), правильный способ доступа к методу действия через класс приложения через BroadcastReceiver
. Вот простой пример:
MainActivity. java
public class MainActivity extends AppCompatActivity {
public static final String ACTION_SHOW_PIN_LAYOUT = "com.example.package.SHOW_PIN_LAYOUT";
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
showPinLayout();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate();
...
registerReceiver(mReceiver, new IntentFilter(ACTION_SHOW_PIN_LAYOUT));
}
@Override
protected void onDestroy() {
super.onDestroy();
...
unregisterReceiver(mReceiver);
}
}
Startup. java
public class Startup extends Application {
...
public void callShowPinLayout() {
sendBroadcast(new Intent(MainActivity.ACTION_SHOW_PIN_LAYOUT));
}
}
Обратите внимание, что для этого сначала необходимо создать MainActivity, поэтому вызовите callShowPinLayout
в подходящее время, когда вы убедились в создании своей активности.
Также я бы предложил EventBus библиотека, созданная для облегчения подобных проблем.
Изменить:
Поскольку вы собираетесь показывать блокировку контактов при запуске приложения пользователем, вам следует иметь дело только с действиями. Я бы порекомендовал реализовать что-то вроде следующего: Объявление макета блокировки контактов как независимого действия. Создание действия при запуске (может быть экран spla sh) и его отметка как действие средства запуска в AndroidManifest.xml
, чтобы решить, отображать ли блокировку контактов или основное действие.
StartupActivity. java
public class StartupActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_startup);
boolean shouldShowLockScreen = true; // you can replace this with your own lock screen visibility algorithm
if (shouldShowLockScreen) {
// Open LockScreenActivity
Intent intent = new Intent(this, LockScreenActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
// Open MainActivity
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
finish();
}
}
AndroidManifest. java
<application
...>
<activity
android:name=".StartupActivity"
android:theme="@style/StartupTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
...
</activity>
</application>
В этой реализации каждый раз, когда пользователь входит в приложение с холодным запуском, алгоритм блокировки экрана определяет, должен ли он / она вводить MainActivity
или нет, и если произойдет горячий запуск, вы можете легко запустить свой мощный StatupActivity
, если необходимо, в onResume()
вашего MainActivity
.