我在活动A &停止/取消另一个活动B 。我努力但没有运气,下面是我的代码:
MainAcitivity
public class MainActivity extends Activity
{
private PendingIntent pendingIntent;
private static Context context;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent myIntent = new Intent(this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 12 * 60 * 60, pendingIntent);
} //end onCreate
}
MyReceiver
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent service1 = new Intent(context, MyAlarmService.class);
context.startService(service1);
}
}
MyAlarmService
public class MyAlarmService extends Service
{
private NotificationManager mManager;
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
// TODO Auto-generated method stub
super.onCreate();
}
@SuppressWarnings("static-access")
@Override
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);
Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class);
Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis());
intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingNotificationIntent = PendingIntent.getActivity( this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(this.getApplicationContext(), "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent);
mManager.notify(0, notification);
}
@Override
public void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
}
}
NextActivity
public class NextActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intentt = new Intent(this, MyReceiver.class);
PendingIntent pintent = PendingIntent.getBroadcast(this, 10, intentt, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
stopService(intentt);
alarm.cancel(pintent);
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.NextActivity"
android:label="Next Screen">
</activity>
<service android:name=".MyAlarmService"
android:enabled="true" />
<receiver android:name=".MyReceiver"/>
</application>
</manifest>
它仍在发出警报,执行此操作后无法停止/取消。
答案 0 :(得分:1)
创建闹钟时,请使用此PendingIntent
:
Intent myIntent = new Intent(MainActivity.getAppContext(), MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 10, myIntent,0);
当您尝试取消它时,您正在使用此PendingIntent
:
Intent intentt = new Intent(MainActivity.getAppContext(), NextActivity.class);
PendingIntent pintent = PendingIntent.getService(this, 10, intentt, 0);
如果要取消闹钟,则需要使用相同的代码创建PendingIntent
。使用getBroadcast()
代替getService()
并使用MyReceiver.class
代替NextActivity.class
。
此外,您无需在MainActivity
中保存应用程序上下文。你可以删除所有这些静态的东西。在执行this
Context
作为new Intent(Context, Thing.class)
参数
答案 1 :(得分:0)
而不是将方法作为静态方式调用,而不是为了执行任务而运行LocalBroadcastManager,而是用于在同一进程中在两个组件之间进行通信。
请参阅以下示例:Android Program to Demonstrate Local BroadCastManager
答案 2 :(得分:0)
OnButton点击下面的代码编写,它为我工作!!!!
finish();
Intent myIntent = new Intent(getBaseContext(),
MyBroadcastReceiver.class);
PendingIntent pendingIntent
= PendingIntent.getBroadcast(getBaseContext(),
alaramid, myIntent, 0);
AlarmManager alarmManager
= (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
//Navigate to your Activity
Intent ii = new Intent(DisplayReminder.this, MenuActivity.class);
ii.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(ii);
finish();