点击通知后获取PendingIntent事件

时间:2015-06-22 18:46:04

标签: android android-intent

我试图在点击通知时点击该活动。

我拥有什么

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

时,我的代码会出现这种情况

enter image description here

当我尝试拨打setLatestEventInfo()

enter image description here

但我不知道这可能是问题的原因,还是将来会带来问题。

我做错了什么?

修改

我刚刚创建了一个示例,我的应用目前正在做什么。当我按Button弹出Notification时,这很简单。在我的真实APP上,我不必点击Button,但它是相同的。我想要的是获取点击Notification的事件并使用该事件进行处理。我已经完成的事情是创建另一个Activity,我把所需的东西放在那里,然后在我要做的事情的最后onCreate()上我呼叫{{1} }方法来完成Finish(),但我不知道它是否是最好的方法。 我想采用另一种方式做到这一点我不想使用两个Activity ...

Activities

编辑2(三个快速问题)继续我的代码...

我希望你不要介意向我解决三个快速的问题......

  1. 从现在起我已经使用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
  2. 我知道用户什么时候制作" Alarm Manager"来自finish()(ACTION_PICK_WIFI_NETWORK)我的意思是当我关闭Intent我已经使用过Intent之后回到我的APP但我不知道如果它是正确的合作方式,不是吗? (如果你不明白我要说的很简单,我想知道用户何时关闭Wifi网络选择器的事件名称)
  3. 一旦你去另一个APP,这是一种让你的APP还活着的方法吗?我的意思是你可以去另一个APP,你的APP仍在工作,没有用户互动?因为从现在开始,如果我去另一个APP,我的应用程序就像睡觉或其他东西,并没有继续运行.... 我已经阅读了一些用onResume()调用任务的内容,我觉得它很顺利,即使APP不在最近的APP中,它仍在运行......
  4. 谢谢,如果你不能回答我,我可以为每个问题发帖,但我认为这些问题可以快速回答。

1 个答案:

答案 0 :(得分:2)

通常,当我们从推送通知中启动Activity时,Intent会在已启动的Activity的{​​{1}}方法中恢复。

在您的情况下,您正在使用onCreate()操作启动系统定义的Activity。我们无法访问此WifiManager.ACTION_PICK_WIFI_NETWORK的{​​{1}},因此似乎无法从中恢复onCreate()

由于您使用Activity创建了Intent,因此无法使用PendingIntent拦截getActivity()Intent由使用BroadcastReceiver创建的BroadcastReceiver触发。

此外,使用PendingIntent代替getBroadcast()(反之亦然)肯定是错误的。这两个实际上不是同一类型的对象。因此,它们不可互换。如果您观察其命名空间分类,则为PendingIntentIntent

我知道这不是你问题的“真实”答案,而是我现在所拥有的一切。如果我能想出解决方案,我会更新这个答案......最好。