2014-10-07 57 views
0

嗨,这是我在stackoverflow上的第一个问题,我是Android编程的初学者。我浏览了大量的网页,但似乎无法找到我的解决方案。我想要做的是在用BroadcastReceiver 5秒后按下按钮时启动一项新的活动。这个活动将有一个新的用户界面与图形和声音(最终)。我得到了BroadcastReceiver的工作,但当它试图启动新的意图时程序崩溃。我究竟做错了什么?从BroadcastReceiver启动一个意图?

在我的MainActivity类别的方法:

public void setAlarm(){  
    Intent intent = new Intent(MainActivity.this, MyBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis() + 5 * 1000, pendingIntent); 
} 

我的广播接收器类:

public class MyBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent){ 

     Intent intent1 = new Intent(context, ShakeActivity.class); 
     context.startActivity(intent1); 
     Toast.makeText(context, "Broadcast works", Toast.LENGTH_LONG).show(); 
    } 
} 

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.shakecounter" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="19" /> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.shakecounter.MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.example.shakecounter.ShakeActivity" 
      android:label="@string/title_activity_shake" > 
     </activity> 

     <receiver android:name="com.example.shakecounter.MyBroadcastReceiver"> 
     </receiver> 
    </application> 

</manifest> 
+0

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – 2014-10-07 07:42:08

回答

0

你必须把国旗FLAG_ACTIVITY_NEW_TASK当你开始来自收件人内部:

Intent intent1 = new Intent(context, ShakeActivity.class); 
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent1); 

如果还有其他问题,您应该发布logcat。

+0

This Works!你们快在这里 – rainingdx 2014-10-07 07:55:17

1
Intent intent1 = new Intent(context, ShakeActivity.class); 
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent1); 
+0

感谢这项工程 – rainingdx 2014-10-07 08:00:55

1

试试这个。

Intent iAlarm = new Intent(mcontext1, Alertdialogclass.class); 
iAlarm.addFlags(Intent.FLAG_FROM_BACKGROUND); 
iAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
mcontext1.startActivity(iAlarm); 
+0

感谢您的快速响应! – rainingdx 2014-10-07 07:56:45