关于设置.AndroidManifest.xml 中配置点击通知要打开的 activity 怎样才能打开Activity


(王直直) #1

您好 我在集成极光支持的第三方推送 我遇到了一些问题

1.AndroidManifest.xml 中配置点击通知要打开的 activity

<activity android:name="您配置的 activity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

注:android:exported 属性必须设置为 true,并增加示例中的 intent-filter,否则会导致无法收到通知。
这句极光的代码中是什么意思 有什么作用


#2

你说的哪一个代码什么作用?这些都是 Android 开发中的一些属性设置。

且点击跳转这个是你们自己实现的,并没有极光强制要求的某代码


(王直直) #3

嗯 怎么说了 点击跳转页面不是在 自定义的服务可以写代码 在那里面进行跳转到自己的页面 我知道这个没有强制 我上面贴的这段代码 官方文档的意思是 点击通知要打开的activity


(王直直) #4

我设置我的activity 后 编译的时候报错 这个activity 必须是官方文档中的那个activity


(王直直) #5


#6

不是很理解,我记忆中文档中并没有对跳转规定某 activity


(王直直) #7

嗯嗯 我也是表达的不清楚 谢谢啦 我自己查看吧 谢谢


#8

你可以把你的错误给出来。

关于点击跳转的实现我们有示例说明
https://docs.jiguang.cn/jpush/client/Android/android_senior/#vs


(王直直) #9

好的 谢谢 bundle.getString(JPushInterface.EXTRA_EXTRA) 我点击通知栏后 这个获取到的为空 这个是不是需要服务端去设置


#10

是的,推送的时候设置了 extra,你才能获取到


(王直直) #11

我点击通知栏后 在自定义的 MyReceiver 中写了判断app是否存在 不管app 退出还是存在 返回一直为存在


(王直直) #12
public static boolean isAppAlive(Context context, String packageName) {
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> processInfos
            = activityManager.getRunningAppProcesses();
    for (int i = 0; i < processInfos.size(); i++) {
        if (processInfos.get(i).processName.equals(packageName)) {
            Log.i("NotificationLaunch",
                    String.format("the %s is running, isAppAlive return true", packageName));
            return true;
        }
    }
    Log.i("NotificationLaunch",
            String.format("the %s is not running, isAppAlive return false", packageName));
    return false;
}

(王直直) #13

else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
Log.d(TAG, “[MyReceiver] 用户点击打开了通知”);
openNotification(context, bundle);
}


(王直直) #14
private void openNotification(Context context, Bundle bundle) {
        Log.d(TAG, "msg   " + bundle.getString(JPushInterface.EXTRA_EXTRA));
        String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
        JSONObject result = null;
        try {
            result = new JSONObject(extras);
            type = result.getInt("type"); //判断商家点击的通知栏类型 // 0有需求信息  2有下单信息  3. 闭店提醒
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Log.d(TAG, isAppAlive(context, "xxx") + "");
        switch (type) {
            case 0:
                break;
            case 2:
                Intent mBootIntent = new Intent(context, NewodresActivity.class);
                mBootIntent.putExtra("bundle", bundle);
                mBootIntent.putExtra("isboolean", true);
                mBootIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(mBootIntent);
                break;
        }
    }

(王直直) #15

打印日志 一直为true 这是怎么一回事


#16

极光 SDK 并没有这种功能,判断不正确与你的代码和手机系统本身支不支持判断有关吧?


(王直直) #17

嗯 的确 我是集成第三方的推送平台的 我在退出app之后 接收到通知 判断方法有问题 我重新找到了新的方法去判断 好了 可以判断了


(王直直) #18
  /**
     * 判断应用是否在运行
     *
     * @param context
     * @return
     */
    public boolean isRun(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
        boolean isAppRunning = false;
        String MY_PKG_NAME = "ni ziji d pgk";
        //100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表系统后台有此进程在运行
        for (ActivityManager.RunningTaskInfo info : list) {
            if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
                isAppRunning = true;
                Log.i("ActivityService isRun()", info.topActivity.getPackageName() + " info.baseActivity.getPackageName()=" + info.baseActivity.getPackageName());
                break;
            }
        }
        Log.i("ActivityService isRun()", "com.ad 程序   ...isAppRunning......" + isAppRunning);
        return isAppRunning;
    }

分享一下 这个方法使用各种机型


(王直直) #19

你好 我这个上面描述的在配置文件中配置的 点击通知栏要跳转的activity 需要怎么才能实现跳转执行呢


#20

推送的时候传 extra 信息,获取到后根据 extra 来设定跳转