Java Android studio在新活动启动时打开应用程序

Java Android studio在新活动启动时打开应用程序,java,android,android-studio,android-activity,alarmmanager,Java,Android,Android Studio,Android Activity,Alarmmanager,我想做的是: 制作报警应用程序,当alarmmanager激活时,切换到新活动并打开应用程序(可停止报警的活动) 我的代码现在的情况是: Alarmmanager将关闭,它将切换到新活动,但应用程序不会打开。您必须手动打开以查看停止报警屏幕。我该怎么做 Mainactivity.java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle s

我想做的是: 制作报警应用程序,当alarmmanager激活时,切换到新活动并打开应用程序(可停止报警的活动)

我的代码现在的情况是: Alarmmanager将关闭,它将切换到新活动,但应用程序不会打开。您必须手动打开以查看停止报警屏幕。我该怎么做

Mainactivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TimePicker klok = findViewById(R.id.timePicker1);
        klok.setIs24HourView(true);
        final Button getTimeBtn = findViewById(R.id.getTimeBtn);
        final TextView showText = findViewById(R.id.showText);
        Intent intent = new Intent(this, AlarmActivation.class);
        final PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
        final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);


        getTimeBtn.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onClick(View view) {
                int uur = klok.getHour();
                int minuut = klok.getMinute();
                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.HOUR_OF_DAY, uur);
                cal.set(Calendar.MINUTE, minuut);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                Toast.makeText(getApplication().getApplicationContext(), "Alarm gaat om " + uur + ":" + minuut,Toast.LENGTH_LONG).show();
                alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);


                showText.setText(Integer.toString(uur) + ':' + Integer.toString(minuut));

            }
        });
    }
}
AlarmActivation.java

public class AlarmActivation extends BroadcastReceiver {
    MediaPlayer mp;
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("alarmact", "voor de service");
        Intent alarmIntent = new Intent(context, MainActivity2.class);
        alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(alarmIntent);

    }
}
public class AlarmActivation extends BroadcastReceiver {
    MediaPlayer mp;
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("alarmact", "voor de service");
        Intent braodintent = new Intent(MainActivity2.BROAD_TAG);
        LocalBroadcastManager.getInstance(this).sendBroadcast(braodintent);

    }
}
MainActivity2.java

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_FULLSCREEN |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    }
}
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.wekkerapp">

    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application


        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity2"
            android:label="@string/title_activity_main2"
            android:theme="@style/AppTheme.NoActionBar"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".AlarmActivation"></receiver>

        <service
            android:name=".WekkerService"
            android:enabled="true"/>

    </application>
</manifest>


希望有人能在这方面帮我一点忙

在你的日常活动中制作广播接收器怎么样

像这样

public class MainActivity2 extends AppCompatActivity {

    public static final String BROAD_TAG = "braodTag";    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_FULLSCREEN |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(BROAD_TAG));
        }

public BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                if (isRunningActivity) {
                    //get Data from intent if you need 

                }
            }
        }
    };
    }
当您发送数据时,(AlarmActivation.java)


你好感谢您的回复,当我尝试此解决方案时,LocalBroadcastmanager已被弃用:/Oh。我的代码是AndriodX-1.1.0。也许你必须使用LiveDataIm,这对android studio和java来说是比较新的,在你的例子中我将如何使用livedata?这个网站将帮助你。我不知道你要测试哪个api,但是有一些限制。从android oreo(api 26)中,您不能在锁定屏幕上显示活动,但您的活动应该打开(屏幕解锁后您将看到它)。在android 10(api 29)中,如果您的应用程序在后台,则无法打开“活动”。@grabarz121您好!感谢您让我知道,为什么我在日常生活中使用的报警应用程序可以在锁屏上显示并在后台打开?我自己运行安卓10,所以根据这个逻辑,当我的手机处于睡眠状态时,我的闹钟应用程序不允许打开活动。也许我对这篇文章理解不够?我不知道。谷歌说可以发出全屏通知,但我没有检查。如果活动听起来不错,可以使用命名。要禁用它,可以使用自定义视图创建自己的通知。一个问题可能只是,当用户将关闭应用程序的通知时,但这是用户问题,而不是开发人员:)