我试图在点击通知时点击该活动。
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String MyText = "Test";
Notification mNotification = new Notification(R.drawable.notification_template_icon_bg, MyText, System.currentTimeMillis() );
String MyNotificationTitle = "Test!";
String MyNotificationText = "Test!";
Intent MyIntent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);
PendingIntent StartIntent = PendingIntent.getActivity(getApplicationContext(),0,MyIntent, PendingIntent.FLAG_CANCEL_CURRENT);
makeToast(StartIntent.getIntentSender().toString());
mNotification.setLatestEventInfo(getApplicationContext(), MyNotificationTitle, MyNotificationText, StartIntent);
notificationManager.notify( NOTIFY_ME_ID, mNotification);
这是完美的,但我不知道该怎么办的事情就是点击该通知。
我尝试在onUserInteraction()
做一些事情,如果我没有错,似乎在Intent开始新活动时被解雇,但是没有工作。
我也试过onActivityResult()
,但我不知道如何获得当前的意图。
我尝试的最后一件事就是做this
之类的事情BroadcastReceiver call_method = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action_name = intent.getAction();
if (action_name.equals("MyIntent")) {
//STUFF HERE
}
};
};
registerReceiver(call_method, new IntentFilter("MyIntent"));
而不是MyIntent
Intent
,我试图放PendingIntent
但不起作用。
当我尝试创建Notification
当我尝试拨打setLatestEventInfo()
但我不知道这可能是问题的原因,还是将来会带来问题。
我做错了什么?
我刚刚创建了一个示例,我的应用目前正在做什么。当我按Button
弹出Notification
时,这很简单。在我的真实APP上,我不必点击Button
,但它是相同的。我想要的是获取点击Notification
的事件并使用该事件进行处理。我已经完成的事情是创建另一个Activity
,我把所需的东西放在那里,然后在我要做的事情的最后onCreate()
上我呼叫{{1} }方法来完成Finish()
,但我不知道它是否是最好的方法。 我想采用另一种方式做到这一点我不想使用两个Activity
...
Activities
我希望你不要介意向我解决三个快速的问题......
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btnoti;
private static final int NOTIFY_ME_ID=1337;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnoti = (Button)findViewById(R.id.btnoti);
btnoti.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnoti){
addNotification();
}
}
private void addNotification() {
//We get a reference to the NotificationManager
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String MyText = "Test";
Notification mNotification = new Notification(R.mipmap.ic_launcher, MyText, System.currentTimeMillis() );
String MyNotificationTitle = "Test!";
String MyNotificationText = "Test!";
Intent MyIntent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);
PendingIntent StartIntent = PendingIntent.getActivity(getApplicationContext(),0,MyIntent, PendingIntent.FLAG_CANCEL_CURRENT);
mNotification.setLatestEventInfo(getApplicationContext(), MyNotificationTitle, MyNotificationText, StartIntent);
notificationManager.notify( NOTIFY_ME_ID, mNotification);
}
执行任务,例如每隔30秒使用Thread.sleep()
执行一项任务,但我不知道它是否是最佳方式,因为我想让用户选择时间,例如时间可能是5分钟或5小时...而且我不知道最好的方式是什么,我已经读过了方法或称为while(true)
的东西是重复任务的正确方法吗?是否有任何源样本知道如何使用此AlarmManager
?Alarm Manager
"来自finish()
(ACTION_PICK_WIFI_NETWORK)我的意思是当我关闭Intent
我已经使用过Intent
之后回到我的APP但我不知道如果它是正确的合作方式,不是吗? (如果你不明白我要说的很简单,我想知道用户何时关闭Wifi网络选择器的事件名称)onResume()
调用任务的内容,我觉得它很顺利,即使APP不在最近的APP中,它仍在运行...... 谢谢,如果你不能回答我,我可以为每个问题发帖,但我认为这些问题可以快速回答。
答案 0 :(得分:2)
通常,当我们从推送通知中启动Activity
时,Intent
会在已启动的Activity
的{{1}}方法中恢复。
在您的情况下,您正在使用onCreate()
操作启动系统定义的Activity
。我们无法访问此WifiManager.ACTION_PICK_WIFI_NETWORK
的{{1}},因此似乎无法从中恢复onCreate()
。
由于您使用Activity
创建了Intent
,因此无法使用PendingIntent
拦截getActivity()
。 Intent
由使用BroadcastReceiver
创建的BroadcastReceiver
触发。
此外,使用PendingIntent
代替getBroadcast()
(反之亦然)肯定是错误的。这两个实际上不是同一类型的对象。因此,它们不可互换。如果您观察其命名空间分类,则为PendingIntent
与Intent
。
我知道这不是你问题的“真实”答案,而是我现在所拥有的一切。如果我能想出解决方案,我会更新这个答案......最好。