MrHu
MrHu
  • 发布:2020-07-15 10:59
  • 更新:2020-07-21 14:14
  • 阅读:3246

动态修改app应用图标

分类:5+ SDK

要求:5+SDK离线打包方式。 iOS 10.3及以上。
思路:在5+SDK离线工程中新增应用图标,在工程info.plist文件新增图标内容,新增一个原生页面(ViewControllers),在原生页面中写修改应用图标代码(步骤3),在js中通过跳转原生页面来修改应用图标,跳转原生页面代码(步骤4)。
安卓的思路也大致一样,通过跳转原生页面来操作应用图标修改。

  1. 配置icons,在工程中新增一个icons应用图标文件,并添加要更改的icon。(可添加多个尺寸和多种类型的icon)

  2. 配置info.plist

  1. 通过代码触发事件来修改应用图标。

    
    - (void)changeAppIconWithName:(NSString *)iconName {  
    if (![[UIApplication sharedApplication] supportsAlternateIcons]) {  
        return;  
    }  
    
    if ([iconName isEqualToString:@""]) {  
        iconName = nil;  
    }  
    [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {  
        if (error) {  
            NSLog(@"更换app图标发生错误了 : %@",error);  
        }  
    }];  
    }  
    [self changeAppIconWithName:@"rain"];  


4.  js跳转原生页面  
/*  
  //ViewControllers为要跳转的原生页面  
            var newVCobj = plus.ios.newObject("ViewControllers");  
            var UIApplicationClass = plus.ios.importClass("UIApplication");  
            var UIAppObj = UIApplicationClass.sharedApplication();  
            var del = plus.ios.invoke(UIAppObj,"delegate");  
            var appWindowObj = plus.ios.invoke(del,"window");  
            var appRootController = plus.ios.invoke(appWindowObj,"rootViewController");  

            //从底部向上弹出方式跳转。  
            plus.ios.invoke(appRootController,"presentViewController:animated:completion:",newVCobj,"YES",null);  

            //带有原生导航的跳转方式,跳转动画为从右到左滑入。  
//          plus.ios.invoke(appRootController,"pushViewController:animated:",newVCobj,"YES");  

//如需传值  
//js注册通知进行js与oc传值  defaultsName为通知名, 1234为需要传的值,  原生实现通知方法进行值接收。  
            SetUserDefault("defaultsName", "1234");  

//注册通知进行js传值到oc界面  
        function SetUserDefault(key, value)    
        {    
            if (typeof value != 'undefined' && typeof key === "string")    
            {    
                var UserDefaultsClass = plus.ios.importClass("NSUserDefaults");    
                var standardUserDefaults = UserDefaultsClass.standardUserDefaults();    
                plus.ios.invoke(standardUserDefaults, "setObject:forKey:", value, key);    
                plus.ios.invoke(standardUserDefaults,"synchronize");    
            }    
        }   

//oc页面实现通知接收传值方法  
NSUserDefaults* pDefDefaults = [NSUserDefaults standardUserDefaults];  
    if (pDefDefaults) {  
        NSString* pString =  [pDefDefaults objectForKey:@"defaultsName"];  
        NSLog(@"这里是js通知所传的值:%@",pString);  
    }  

返过来,oc要给js传值也可以通过发送通知进行传值。  

*/  

demo:下方  
1 关注 分享
Y***@gmail.com

要回复文章请先登录注册

unicorn_up

unicorn_up

请问, 工程环境是哪个版本的uni离线工程? 放在最新版2.7.14工程中有很多lib文件缺失.
2020-07-21 14:14