- 😄 个人主页:✨拉莫帅-CSDN博客✨
- 🤔 博文:132篇
- 🔥 原创:130篇,转载:2篇
- 🔥 总阅读量:388923
- ❤️ 粉丝量:112
- 🍁 感谢点赞和关注 ,每天进步一点点!加油!🍁
目录
- 《工业和信息化部关于开展移动互联网应用程序备案工作的通知》
- 1、前言
- 2、备案收费?
- 3、查询备案号
- 4、拆解功能
- 5、具体实现
- 5.1、资源文件
- 5.2、逻辑处理
- 6、结尾
《工业和信息化部关于开展移动互联网应用程序备案工作的通知》
官网文档直通车—> ✈✈✈✈✈✈
1、前言
最近工作繁忙,忙里空闲下来给大家,写一下最近火热的ICP备案。
相信大家最近应用上架,都遇到了无法审核的情况!原因就是是要求必须填写“中国大陆ICP备案号”。
让我们一起来看看、解析一下工信部官方文档
根据工业和信息化部2023-07-21发布的《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,原则上要求所有APP、小程序、快应用在2023年9月1日之后需要完成ICP备案后方可进行上架。
对于已上架的APP、小程序、快应用,需要在2024年3月31日之前完成ICP备案,否则会对其进行下架。
上面官方文档中所描述的APP、小程序、快应用备案均指ICP备案(非经营性互联网信息服务)
2、备案收费?
首先通过如上了解ICP备案是什么之后,相信大家在各大平台都看到过相关的如何申请ICP备案号。新规出现的同时,也有一些人冒头收割收费等。。屡见不鲜。
ICP备案其实不用付费!付费就等着被收割,即使付费也是教你如何去填写相关资料等。
那么我们该如何备案呢?只需要我们找 “服务提供商(或者说服务器提供商):简单一点就是服务器是哪一家提供的,你就找哪一家就行(例如:我们使用的是阿里云)”, 填写app相关信息即可!
3、查询备案号
对于已经申请下来的ICP备案号,对于app如何开发这个功能,并且让大众用户在公共平台查验呢?
这里我们借鉴一下微信,个人感觉微信平台关于这个功能就很好。对于相关操作都在程序应用内实现的,无需调用三方浏览器等
,具体实现效果如下:
4、拆解功能
通过如上效果图,可以拆分为如下几个功能:
- 长按ICP备案号可以实现复制功能;
- 长按或者单击切换背景;
- 单击ICP备案号后,WebView加载页面且进度条展示。
看一下我们自己实现的效果:
5、具体实现
5.1、资源文件
activity_main.xml 布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"tools:context=".MainActivity"><LinearLayoutandroid:id="@+id/mIcp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="25dp"android:background="@drawable/selector_icp_background"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="ICP备案号:"android:textColor="#B4B4B4"android:textSize="11sp" /><TextViewandroid:id="@+id/tvTxt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="京ICP备11122222号-01A"android:textColor="#B4B4B4"android:textSize="11sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text=" >"android:textColor="#B4B4B4"android:textSize="11sp" /></LinearLayout>
</RelativeLayout>
selector_icp_background.xml 切换背景selector
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/gray_bg" android:state_pressed="true" /><item android:drawable="@drawable/white_bg" />
</selector>
gray_bg.xml 选中背景
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><cornersandroid:bottomLeftRadius="3dp"android:bottomRightRadius="3dp"android:topLeftRadius="3dp"android:topRightRadius="3dp" /><solid android:color="#CCCCCC" /><!-- 填充颜色 --><strokeandroid:width="0.1mm"android:color="#CCCCCC" /><!-- 描边,边框宽度、颜色 -->
</shape>
white_bg 默认背景
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><cornersandroid:bottomLeftRadius="3dp"android:bottomRightRadius="3dp"android:topLeftRadius="3dp"android:topRightRadius="3dp" /><solid android:color="#ffffff" /><!-- 填充颜色 --><strokeandroid:width="0.1mm"android:color="#ffffff" /><!-- 描边,边框宽度、颜色 -->
</shape>
activity_web_view.xml 加载webView资源文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".WebViewActivity"><com.harry.wifimanage.utils.WebViewUtilandroid:id="@+id/mWebView"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>
5.2、逻辑处理
MainActivity.class
展示ICP备案号,且实现点击切换效果;
这里采用剪切板来实现文本复制功能。
/*** @author 拉莫帅* @date 2023/12/19* @address* @Desc ICP备案号处理*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {// TextView控件引用private TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化控件mTextView = findViewById(R.id.tvTxt);LinearLayout mIcpLayout = findViewById(R.id.mIcp);mIcpLayout.setOnClickListener(this);// 设置长按点击事件mIcpLayout.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {String text = mTextView.getText().toString();if (!TextUtils.isEmpty(text)) {ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);ClipData label = ClipData.newPlainText("label", text);clipboard.setPrimaryClip(label);Toast.makeText(MainActivity.this, "复制成功", Toast.LENGTH_SHORT).show();}return true;}});}@Overridepublic void onClick(View v) {if (v.getId() == R.id.mIcp) {startActivity(new Intent(MainActivity.this, WebViewActivity.class));}}
}
WebViewActivity.class 加载url资源
WebViewUtil:复用webView,设置其属性、且进度条显示
/*** @author 拉莫帅* @date 2023/12/19* @address* @Desc 加载url资源*/
public class WebViewActivity extends AppCompatActivity {// url地址private final String path = "https://beian.miit.gov.cn/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_view);// 初始化控件WebViewUtil mWeb = findViewById(R.id.mWebView);// 加载资源mWeb.loadUrl(path);}
}
/*** @author 拉莫帅* @date 2023/12/19* @address* @Desc 复用WebView*/
public class WebViewUtil extends WebView {private ProgressBar progressbar;public WebViewUtil(Context context) {super(context);}public WebViewUtil(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public WebViewUtil(Context context, AttributeSet attrs) {super(context, attrs);initProgressBar(context);openJavaScript();setWebViewClient(new WebViewClient());setWebChromeClient(new WebChromeClient());}@SuppressLint("ResourceAsColor")private void initProgressBar(Context context) {progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);int color = Color.argb(235, 2, 198, 94);ColorDrawable colorDrawable = new ColorDrawable();colorDrawable.setColor(color);progressbar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp2px(context, 3), 0, 0));// 改变progressbar默认进度条的颜色progressbar.setProgressDrawable(new ClipDrawable(colorDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL));addView(progressbar);}/*** 方法描述:启用支持javascript*/private void openJavaScript() {WebSettings settings = getSettings();settings.setJavaScriptEnabled(true);settings.setAllowFileAccess(true);settings.setAllowFileAccessFromFileURLs(true);settings.setAllowUniversalAccessFromFileURLs(true);settings.setCacheMode(WebSettings.LOAD_NO_CACHE);settings.setJavaScriptCanOpenWindowsAutomatically(true);// settings.setBuiltInZoomControls(true);settings.setSupportZoom(true);// settings.setUseWideViewPort(true);settings.setLoadWithOverviewMode(true);settings.setGeolocationEnabled(true);settings.setDomStorageEnabled(true);}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);}/*** 方法描述:根据手机的分辨率从 dp 的单位 转成为 px(像素)*/public int dp2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}/*** 类描述:显示WebView加载的进度情况*/public class WebChromeClient extends android.webkit.WebChromeClient {@Overridepublic void onProgressChanged(WebView view, int newProgress) {if (newProgress == 100) {progressbar.setVisibility(GONE);} else {if (progressbar.getVisibility() == GONE)progressbar.setVisibility(VISIBLE);progressbar.setProgress(newProgress);}super.onProgressChanged(view, newProgress);}}
}
6、结尾
看到这里,证明你已经都掌握了该功能!功能其实没有想象的那么复杂,拆分 -> 汇总 -> 实现功能即可。