Gub*_*bel 38 android broadcastreceiver android-activity
我正在尝试使用onPause()方法中实现的以下BroadcastReceiver自动启动我的nightclock应用程序进行充电:
BroadcastReceiver test = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this);
Intent i = new Intent(context, NightClock.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
};
registerReceiver(test, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
Run Code Online (Sandbox Code Playgroud)
插入USB电缆时会触发onReceive()方法,但活动无法启动.但是日志显示了这个:
I/ActivityManager( 79): Starting activity: Intent { flg=0x10000000 cmp=com.meins.nightclock/.NightClock }
Run Code Online (Sandbox Code Playgroud)
日志说活动开始的任何想法,但没有任何反应?
Sat*_*ish 61
您将上下文作为参数传递给onRecieve()方法,因此只需使用:
@Override
public void onReceive(Context context, Intent intent) {
//start activity
Intent i = new Intent();
i.setClassName("com.test", "com.test.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
它有效,当然你必须将包和活动类名更改为你自己的.
Com*_*are 21
如果您的目标是NightClock在发送ACTION_POWER_CONNECTED广播时想要启动,那么您使用a的方法就可以了BroadcastReceiver.但是,请勿从活动中注册.而是在清单中注册它:
<receiver android:name=".OnPowerReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
然后,让你BroadcastReceiver作为一个公共Java类(这里命名OnPowerReceiver,虽然你可以随意调用它),并让它调用startActivity().
请记住,用户可能不希望您这样做.除了启动"夜钟"之外,还有许多其他情况可以将手机连接到电源.我谦卑地建议你让用户通过主屏幕开始你的活动.
| 归档时间: |
|
| 查看次数: |
65050 次 |
| 最近记录: |