精华内容
下载资源
问答
  • 中兴无线上网管理软件pcp902m2v1.0.1.1b05
  • 主要介绍了跨网段监控软件、如何跨网段监控、同交换机多vlan上网管理控制软件的选择,需要的朋友可以参考下
  • Android DownloadManager下载管理app更新

    千次阅读 2017-03-20 15:18:33
    在日常APP的开发中,通常情况下无可避免的要与调用网络后台数据接口。关于Android 网络请求接口的方式可以点击此此处进行学习。当我们实现一个从网络下载文件的功能时候,一般设计思路是这样的:使用Http发起请求,...

    目录

    前言

    一、介绍

    二、使用事项

    三、Request类注意事项

    四、Query 类

    五、下载完成监听

    六、原理简析

    七、小结


    前言

    在日常APP的开发中,通常情况下无可避免的要与调用网络后台数据接口。关于Android 网络请求接口的方式可以点击此此处进行学习。当我们实现一个从网络下载文件的功能时候,一般设计思路是这样的:使用Http发起请求,在IntentService的线程进行中下载,再配合Handler更新UI显示保持和用户交互。那么看了本篇就不需要那么麻烦了,因为Google因为帮我们封装好了一个方便下载的API叫做Downloadmanager。下面会先详细介绍实际使用方式,最后将这个API的实现原理。

     


    本案例下载地址

    https://download.csdn.net/download/csdn_aiyang/10906816


    一、介绍

    DownloadManager是android2.3(API 9)以后系统提供下载的方法,是处理长期运行的HTTP下载的系统服务。客户端可以请求的URI被下载到一个特定的目标文件。客户端将会在后台与http交互进行下载,或者在下载失败,或者连接改变,重新启动系统后重新下载。还可以进入系统的下载管理界面查看进度。DownloadManger有两个内部类:Request 和Query。Request类可设置下载的一些属性;Query类可查询当前下载的进度等信息。三个公共方法:enqueue、query和remove。enqueue在队列中插入一个新的下载。当连接正常,并且DownloadManager准备执行这个请求时,开始自动下载。返回结果是系统提供的唯一下载ID,这个ID可以用于与这个下载相关的回调。query公共方法,用于查询下载信息。remove公共方法,用于删除下载,如果下载中则取消下载。同时会删除下载文件和记录。

     

    二、使用事项

    首先,填写好所需权限:

    <uses-permission android:name="android.permission.INTERNET" />;
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>;

    创建对象,设置下载地址:

    DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(apkUrl));
    long id = downloadManager.enqueue(request);//每下载的一个文件对应一个id,通过此id可以查询数据

    取消下载:

    该方法返回成功取消的下载的个数。如果一个下载被取消了,所有相关联的、部分下载的和完全下载的文件都会被删除。

    downloadManager.remove(id);  
    int cancers = downloadManager.remove(id_1, id_2, id_3);  

    小案例实现代码:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private TextView down;
        private TextView progress;
        private TextView file_name;
        private ProgressBar pb_update;
        private DownloadManager downloadManager;
        private DownloadManager.Request request;
        public static String downloadUrl = "http://ucdl.25pp.com/fs08/2017/01/20/2/2_87a290b5f041a8b512f0bc51595f839a.apk";
        Timer timer;
        long id;
        TimerTask task;
        Handler handler =new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Bundle bundle = msg.getData();
                int pro = bundle.getInt("pro");
                String name  = bundle.getString("name");
                pb_update.setProgress(pro);
                progress.setText(String.valueOf(pro)+"%");
                file_name.setText(name);
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            down = (TextView) findViewById(R.id.down);
            progress = (TextView) findViewById(R.id.progress);
            file_name = (TextView) findViewById(R.id.file_name);
            pb_update = (ProgressBar) findViewById(R.id.pb_update);
            down.setOnClickListener(this);
    
            //创建对象
            downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            request = new DownloadManager.Request(Uri.parse(downloadUrl));
            request.setTitle("大象投教");
            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
            request.setAllowedOverRoaming(false);
            request.setMimeType("application/vnd.android.package-archive");
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            //创建目录
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdir() ;
            //设置文件存放路径
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS  , "app-release.apk" ) ;
    
    
            //手写更新UI
            pb_update.setMax(100);
            final  DownloadManager.Query query = new DownloadManager.Query();
            timer = new Timer();
            task = new TimerTask() {
                @Override
                public void run() {
                    Cursor cursor = downloadManager.query(query.setFilterById(id));
                    if (cursor != null && cursor.moveToFirst()) {
                        if (cursor.getInt(
                                cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                            pb_update.setProgress(100);
                            install(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/app-release.apk" );
                            task.cancel();
                        }
                        String title = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE));
                        String address = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                        int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                        int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
                        int pro =  (bytes_downloaded * 100) / bytes_total;
                        Message msg =Message.obtain();
                        Bundle bundle = new Bundle();
                        bundle.putInt("pro",pro);
                        bundle.putString("name",title);
                        msg.setData(bundle);
                        handler.sendMessage(msg);
                    }
                    cursor.close();
                }
            };
            timer.schedule(task, 0,1000);
    
    //        downloadManager.remove(id);
        }
    
        @Override
        public void onClick(View v) {
            id = downloadManager.enqueue(request);
            task.run();
            down.setClickable(false);
        }
        private void install(String path) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse("file://" + path), "application/vnd.android.package-archive");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//4.0以上系统弹出安装成功打开界面
            startActivity(intent);
        }
    }

    布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/file_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:text="dxtj.apk"/>
        <ProgressBar
            android:id="@+id/pb_update"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="10dp"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/progressbar_color"
            android:layout_marginBottom="20dp"
            />
    
        <TextView
            android:id="@+id/progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_marginBottom="20dp"
            android:text="0%"/>
        <TextView
            android:id="@+id/down"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:background="@color/colorAccent"
            android:text="立即下载"/>
    </LinearLayout>
    

    Progress_bar.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item android:id="@android:id/background">
    
            <shape>
    
                <corners android:radius="10dip" />
    
                <gradient
                    android:angle="0"
                    android:centerColor="#e4e4e4"
                    android:centerY="0.75"
                    android:endColor="#e4e4e4"
                    android:startColor="#e4e4e4" />
            </shape>
        </item>
    
        <item android:id="@android:id/secondaryProgress">
    
            <clip>
    
                <shape>
    
                    <corners android:radius="10dip" />
    
                    <gradient
                        android:angle="0"
                        android:centerColor="#e4e4e4"
                        android:centerY="0.75"
                        android:endColor="#e4e4e4"
                        android:startColor="#e4e4e4" />
                </shape>
            </clip>
        </item>
    
        <item android:id="@android:id/progress">
    
            <clip>
    
                <shape>
    
                    <corners android:radius="10dip" />
    
                    <gradient
                        android:angle="0"
                        android:endColor="@color/colorAccent"
                        android:startColor="@color/colorAccent" />
                </shape>
            </clip>
        </item>
    
    </layer-list>
    

     

    三、Request类注意事项

     public static class Request {
            public static final int NETWORK_MOBILE = 1;
            public static final int NETWORK_WIFI = 2;
            public static final int VISIBILITY_HIDDEN = 2;
            public static final int VISIBILITY_VISIBLE = 0;
            public static final int VISIBILITY_VISIBLE_NOTIFY_COMPLETED = 1;
            public static final int VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION = 3;
    }

    1、指定下载位置及文件名称:

            /**
             * 方法1: 
             * 目录: Android -> data -> com.app -> files -> Download -> dxtj.apk
             * 这个文件是你的应用所专用的,软件卸载后,下载的文件将随着卸载全部被删除
             */
            request.setDestinationInExternalFilesDir( this , Environment.DIRECTORY_DOWNLOADS ,  "dxtj.apk" );  
    
            /**
             * 方法2:
             * 下载的文件存放地址  SD卡 download文件夹,dxtj.apk
             * 软件卸载后,下载的文件会保留
             */
            //在SD卡上创建一个文件夹
            request.setDestinationInExternalPublicDir(  "/epmyg/"  , "dxtj.apk" ) ;  
    
    
            /**
             * 方法3:
             * 如果下载的文件希望被其他的应用共享
             * 特别是那些你下载下来希望被Media Scanner扫描到的文件(比如音乐文件)
             */
            request.setDestinationInExternalPublicDir( Environment.DIRECTORY_MUSIC,  "告白气球.mp3" );  
    
            /**
             * 方法4
             * 文件将存放在外部存储的确实download文件内,如果无此文件夹,创建之,如果有,下面将返回false。
             * 系统有个下载文件夹,比如小米手机系统下载文件夹  SD卡--> Download文件夹
             */
            //创建目录
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdir() ; 
    
            //设置文件存放路径
            request.setDestinationInExternalPublicDir(  Environment.DIRECTORY_DOWNLOADS  , "dxtj.apk" ) ;
        

    2、指定下载的网络类型:

    //指定在WIFI状态下,执行下载操作。
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
    //指定在MOBILE状态下,执行下载操作
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE);
    //是否允许漫游状态下,执行下载操作
    request.setAllowedOverRoaming(boolean);
    //是否允许“计量式的网络连接”执行下载操作
    request.setAllowedOverMetered(boolean); //默认是允许的。

    3、定制Notification通知样式:

    //设置Notification的标题和描述
    request.setTitle("标题");  
    request.setDescription("描述"); 
    //设置Notification的显示,和隐藏。
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);

     VISIBILITY_VISIBLE:通知显示,只是在下载任务执行的过程中显示,下载完成自动消失。(默认值) 
     VISIBILTY_HIDDEN: 通知将不会显示,如果设置该属性的话,必须要添加权限 

    Android.permission.DOWNLOAD_WITHOUT_NOTIFICATION. 

     VISIBILITY_VISIBLE_NOTIFY_COMPLETED : 通知显示,下载进行时,和完成之后都会显示。 
     VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION :下载完成时显示通知。 

     

    4、设置下载文件类型:

    request.setMimeType("application/vnd.android.package-archive");

    这是安卓.apk文件的类型。有些机型必须设置此方法,才能在下载完成后,点击通知栏的Notification时,才能正确的打开安装界面。不然会弹出一个Toast(can not open file)。其他文件类型的MimeType ,根据需求上网查一下吧 。如果设置了mimeType为application/cn.trinea.download.file,我们可以同时设置某个Activity的intent-filter为application/cn.trinea.download.file,用于响应点击的打开文件。

       <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
    
                    <data android:mimeType="application/cn.trinea.download.file" />
                </intent-filter>
            </activity>

    5、添加请求下载的网络链接的http头,比如User-Agent,gzip压缩等:

    request.addRequestHeader(String header, String value);

    四、Query 类

    Request类中封装了Notification ,简单设置属性就显示进度信息了。有时候需要在App中获取实时下载进度。而Query类就是提供查询的一些方法。 由于downloadManager将数据保存在数据库的,所以需要获得一个Cursor 结果集,通过结果集获得我们想要的数据。

    DownloadManager.Query query = new DownloadManager.Query();
        Cursor cursor = downloadManager.query(query.setFilterById(id));
             if (cursor != null && cursor.moveToFirst()) {
            //下载的文件到本地的目录
            String address = 
                    cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
            //已经下载的字节数
            int bytes_downloaded =
                    cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
            //总需下载的字节数
            int bytes_total = 
                    cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
            //Notification 标题
            String title =
                    cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE));
            //描述
            String description =
                    cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_DESCRIPTION));
            //下载对应id
            long id =
                    cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_ID));
            //下载文件名称
            String filename =
                    cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
            //下载文件的URL链接
            String url =
                    cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_URI));
        }

    这只能获取一次,数据库中的信息。我们可以使用Timer类,每隔一段时间去查询数据库即可。也可以使用ContentProvider去访问:

        
    
        private static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads");
        private DownloadContentObserver observer = new DownloadContentObserver();
    
        @Override
        protected void onResume() {
            super.onResume();
            getContentResolver().registerContentObserver(CONTENT_URI, true, observer);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            getContentResolver().unregisterContentObserver(observer);
        }
    
    //ContentObserver 内部类监听下载进度
        class DownloadContentObserver extends ContentObserver {
            public DownloadContentObserver() {
                super(handler);
            }
    
            @Override
            public void onChange(boolean selfChange) {
                updateView();//更新UI
            }
    
        }

    五、下载完成监听

    下载完成后,下载管理服务会发出DownloadManager.ACTION_DOWNLOAD_COMPLETE这个广播,并传递downloadId作为参数。通过接受广播我们可以打开对下载完成的内容进行操作。

    private CompleteReceiver completeReceiver;
    
    class CompleteReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // get complete download id
            long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            // to do here
        }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //...
        
        completeReceiver = new CompleteReceiver();
        //register download success broadcast
        registerReceiver(completeReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(completeReceiver);
    }
    
    

    六、原理简析

    DownloadManager开始下载的入口enqueue方法,这个方法的源码如下:

    public long enqueue(Request request) {
        ContentValues values = request.toContentValues(mPackageName);
        Uri downloadUri = mResolver.insert(Downloads.Impl.CONTENT_URI, values);
        long id = Long.parseLong(downloadUri.getLastPathSegment());
        return id;
    }
    
    

    使用的ContentProvider方式,“request.toContentValues()”,将Request信息转换为ContentValues类。

    然后调用ContentResolver进行插入“mResolver.insert()”,调用对应的ContentProvider的insert方法。传入的参数,URI是Downloads.Impl.CONTENT_URI,即"content://downloads/my_downloads",找到对应系统提供的DownloadProvider

    DownloadProvider类在系统源码的src/com/android/providers/downloads的路径下,找都其insert方法的实现,可以发现最后部分的代码:

    public Uri insert(final Uri uri, final ContentValues values) {
        ...
        // Always start service to handle notifications and/or scanning
        final Context context = getContext();
        context.startService(new Intent(context, DownloadService.class));
    
        return ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, rowID);
    }
    
    

    即插入信息后,会启动DownloadService开始进行下载。(源码学习|Android N DownloadManager源码分析

    DownloadService的入口是onStartCommand方法,其中用mUpdateHandler发送消息MSG_UPDATE,mUpdateHandler处理消息的方式如下:

    mUpdateHandler = new Handler(mUpdateThread.getLooper(), mUpdateCallback);
    
    private Handler.Callback mUpdateCallback = new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
            ...
            final boolean isActive;
            synchronized (mDownloads) {
                isActive = updateLocked();
            }
            ...
        }
    };
    
    private boolean updateLocked() {
        ...
         // Kick off download task if ready
         final boolean activeDownload = info.startDownloadIfReady(mExecutor);
        ...
    }
    
    public boolean startDownloadIfReady(ExecutorService executor) {
        synchronized (this) {
            final boolean isReady = isReadyToDownload();
            final boolean isActive = mSubmittedTask != null && !mSubmittedTask.isDone();
            if (isReady && !isActive) {
                if (mStatus != Impl.STATUS_RUNNING) {
                    mStatus = Impl.STATUS_RUNNING;
                    ContentValues values = new ContentValues();
                    values.put(Impl.COLUMN_STATUS, mStatus);
                    mContext.getContentResolver().update(getAllDownloadsUri(), values, null, null);
                }
                //启动DownloadThread开始下载任务
                mTask = new DownloadThread(mContext, mSystemFacade, mNotifier, this);
                mSubmittedTask = executor.submit(mTask);
            }
            return isReady;
        }
    }

    从上面源码可以看,DownloadService的onStartCommand方法,最终启动DownloadThread,开始下载的任务(网络请求接口使用的是HttpURLConnection)。DownloadThread在下载过程中,会更新DownloadProvider。

    综上所述,DownloadManager的enqueue方法的流程是:

    DownloadProvider插入信息 >> 启动DownloadService >> 开始DownloadThread进行下载

     

     

    七、小结

    1、我发现,在下载的时候,发送Notification时 是没有声音的。也没有设置声音的方法。不过这影响不大。主要的功能实现就好。 
    2、因为这是系统的类,每个系统的Notification界面是不一样的。这就是每个rom厂家的自定义了。小米和魅族的就大不一样。魅族Notification上有一个下载暂停的按钮,而小米没有。所以导致Notification是不能统一的。其实,暂停的话用户可以点击notification,进入到下载管理界面,就有暂停按钮了。

    3、会出现被用户手动禁用了下载器出现崩溃情况。需要做好版本兼容和弹框让用户手动开启。


    参考链接:https://www.jianshu.com/p/e0496200769c DownloadManager的使用和解析-简书

    展开全文
  • APP是英文Application的简称现在的APP多指智能手机的第三方应用程序随着智能手机和ipad等移动终端设备的普及人们逐渐习惯了使用APP客户端上网的方式而目前国内各大电商均拥有了自己的APP客户端这标志着APP客户端的...
  • 任意安装你想要的 APP ???? 文中使用的方法为DNS劫持车机应用商店,需要你具备一定的操作能力,否则将无法达到最终目的。 ???? 阅读本文,视为你有一定电脑基础,请不要重复询问无关痛痒的问题(百度就是最好的老师...

    【2021年7月2日更新】吉利车机任意安装你想要的 APP

    在这里插入图片描述

    💡 文中使用的方法为DNS重定向,需要你具备一定的操作能力,否则将无法达到最终目的。
    💡 阅读本文,视为你有一定电脑基础,请不要重复询问无关痛痒的问题(百度就是最好的老师)!
    💡 严正声明:本方法不会对你的任何设备造成破坏,不影响原车功能使用,本dns重定向下载软件方法自愿使用,并自行承担一切不利后果,下载软件后请及时恢复设备dns设置。

    支持车型:博瑞GE全系列,18款20款博越、星越全系列、缤越全系列、缤瑞全系列、嘉际全系列、领克全系列、帝豪gl、帝豪gs、博越PRO、吉利icon等车型
    在这里插入图片描述

    本文中使用1号服务器:119.167.180.48

    笔记本操作视频教程
    http://dwz.win/9zz
    🚩教程所需物料:

    根据教程来操作,只需要满足以下三种其一即可,不需要公对公数据线等其他设备。

    1)笔记本
    如果你有一台笔记本的话,操作的步骤很简单,成功率100%

    2)手机
    没有笔记本的情况下,就需要你的手机支持双路 wifi,也就是支持连接 wifi 的同时可以再打开共享热点功能,已知苹果手机不行,但大部分安卓机都支持,接下来教程中使用的就是小米手机。

    3)能连上无线网
    如果没有笔记本,也没有支持双路 wifi 的手机,就需要在车里能搜到你家的无线网,或者别人家的也可以。但需要有路由器的管理权限,需要进入到路由器进行设置。接下来的教程中会讲到!

    🚩具体操作流程:
    win10操作视频教程:http://dwz.win/6Vg(注意大小写)
    一、 win10笔记本操作流程
    在这里插入图片描述

    在车里,手机开热点给笔记本,然后进行以下操作。

    一句话总结:修改笔记本 wifi 的 dns 地址,打开笔记本移动热点,车机连接笔记本热点!

    🎉修改笔记本dns地址

    第一步:
    电脑右下角 wifi 图标 —> 右键 —> 打开网络和 Internet 选项

    第二步:
    点击:更改适配器选项

    第三步:
    找到带有正在连接 wifi 名字的小电脑 —> 右键 —> 属性

    第四步:
    双击“Internet 协议版本 4(TCP/IPv4)”

    第五步:
    点击:“使用下面的 dns 服务器地址”

    第六步:
    在这里插入图片描述

            首选 dns 服务器填入:119.167.180.48
    

    第七步:
    打开浏览器访问 www.test.com 或 www.apple.com 测试,确保看到提示成功页面

    🎉开启笔记本移动热点

    第八步:
    电脑右下角 wifi 图标 —> 右键 —> 打开网络和 Internet 选项

    第九步:
    选择左侧“移动热点”,点击“编辑”按钮,先修改热点名称和密码(名称不能有中文)

    第十步:
    开启热点

    第十一步:
    车机打开应用市场和会员中心,确定已经是登录状态!(连上无线网将无法登陆,先断开无线网登录好再连上)

    第十二步:
    车机连接笔记本电脑热点

    第十三步:
    打开应用市场下拉刷新,出现新的软件列表,下载对应软件

    ● ❓ 提示:如果以上教程你还是不懂,百度搜索关键词:
    ● “win10 笔记本如何修改 dns”
    ● “win10 笔记本如何开启移动热点”

    WIN7/8视频教程:http://dwz.win/6Vh(注意大小写)
    二、 win7/win8操作流程
    在这里插入图片描述

    在车里,手机开热点给笔记本,然后进行以下操作。

    一句话总结:修改笔记本 wifi 的 dns 地址,打开笔记本移动热点,车机连接笔记本热点!

    🎉修改笔记本dns地址

    第一步:
    电脑右下角 wifi 图标 —> 右键 —> 打开网络和 Internet 选项

    第二步:
    点击:更改适配器选项

    第三步:
    找到带有正在连接 wifi 名字的小电脑—>右键—>属性

    第四步:
    双击“Internet 协议版本 4(TCP/IPv4)”

    第五步:
    点击:“使用下面的 dns 服务器地址”

    第六步:
    在这里插入图片描述

            首选 dns 服务器填入:119.167.180.48
    

    第七步:
    打开浏览器访问 www.test.com 或 apple.com 测试,确保看到提示成功页面

    🎉开启笔记本移动热点

    第八步:
    下载猎豹免费 wifi

    第九步:
    在猎豹 wifi 中打开“设置”,
    将“安全上网”中的:
    “防 DNS 劫持”
    “防篡改”
    “智能限速”
    都选择关闭

    第十步:
    修改一下 wifi 名称和密码,简单一些就可以了

    第十一步:
    车机打开应用市场和会员中心,确定已经是登录状态!(连上无线网将无法登陆,先断开无线网登录好再连上)

    第十二步:
    车机连接笔记本电脑热点

    第十三步:
    打开应用市场下拉刷新,出现新的软件列表,下载对应软件

    ● ❓ 提示:如果以上教程你还是不懂,百度搜索关键词:
    ● “win7/win8 笔记本如何修改 dns”
    ● “win7/win8 笔记本如何开启移动热点”
    ● “猎豹 wifi 如何设置”
    三、手机操作流程

    在车里,手机连上 wifi,然后进行以下操作。

    一句话总结:修改手机连接的 wifi 的 dns 地址,打开个人热点,车机连接笔记本热点!

    注意:苹果手机不支持连接 wifi 同时开启个人热点,尽量不连接苹果手机或非移动手机卡开启的热点,会影响成功率,请更换设备操作!

    🎉修改手机dns地址

    第一步:
    (华为手机为例)进入 wifi 页面,长接 wifi 名称弹出修改网络,勾选显示高级设置 或 点击 wifi 名称右侧进入网络参数设置页面。

    第二步:
    找到 IP 设置,把 DHCP 改为静态 IP

    第三步:
    在这里插入图片描述

            将域名1 和 域名2 改为 119.167.180.48  部分手机 叫 DNS 1 和DNS 2
    

    第四步:
    打开浏览器访问 www.test.com 或 apple.com 测试,确保看到提示成功页面

    🎉开启手机个人热点

    第五步:
    进入热点设置页面(华为是wlan信号桥),首先修改热点名称和密码(不能有中文)

    第六步:
    开启wlan信号桥热点

    第七步:
    车机打开应用市场和会员中心,确定已经是登录状态!(连上无线网将无法登陆,先断开无线网登录好再连上)

    第八步:
    车机连接手机共享出来的热点

    第九步:
    打开应用市场下拉刷新,出现新的软件列表,下载对应软件

    ● ❓ 提示:如果以上教程你还是不懂,百度搜索关键词:
    ● “XX 手机支持连 wifi 同时开启热点吗”
    ● “XX 手机如何修改 dns”
    ● “XX 手机如何开启移动热点”

    四、路由器操作流程

    在车里,手机连上你家的 wifi(或你能进路由器管理页面),确保车机也能搜到这个 wifi,然后进行以下操作。(图为TPlink路由器,如果你家是网关则不行)

    一句话总结:修改路由器 dns 地址,车机连接路由器的 wifi!

    路由器通用设置方式
    第一步:
    手机连上你家无线网,打开并登陆(通常192.168.0.1或192.168.1.1)路由器管理页面,手机操作的话需要切换到电脑版管理页面才能显示全部功能

    第二步:
    选择“网络设置”或“上网设置”,有些路由器是在“DHCP服务器”里可以设置dns

    第三步:
    在这里插入图片描述

            找到 LAN 口设置或DHCP服务器,将首选 DNS 修改为 119.167.180.48
    

    第四步:
    保存,并重启一次路由器

    第五步:
    手机再连接上路由器 wifi,打开浏览器访问 www.test.com 或 apple.com 测试,确保看到提示成功页面

    第六步:
    车机打开应用市场和会员中心,确定已经是登录状态!(连上无线网将无法登陆,先断开无线网登录好再连上)

    第七步:
    车机连接路由器的无线网

    第八步:
    打开应用市场下拉刷新,出现新的软件列表,下载对应软件

    ● ❓ 提示:如果以上教程你还是不懂,百度搜索关键词:
    ● “XX品牌 路由器如何修改 DNS”

    展开全文
  • 从10.13升级到Mojave(10.14.6)后出现了一个很恼人的问题,那就是Mac app store下载软件时,点击下载后一直转圈,却无法完成。上网查了半天,试了很多方法都没用,终于在外网找到了一个可行的解决方案,成功解决了...

    简介

    从10.13升级到Mojave(10.14.6)后出现了一个很恼人的问题,那就是Mac app store下载软件时,点击下载后一直转圈,却无法完成。上网查了半天,试了很多方法都没用,终于在外网找到了一个可行的解决方案,成功解决了问题。此方法对白苹果及黑苹果均有效。

    现象描述

    升级到Mojave(10.14.6)后,出现了app store无法下载的问题。不管是付费还是免费的软件,点击之后一直转圈,但是下载根本无法开始。
    打开控制台,搜索app store的error类日志,会发现有这样的错误提示:

    Failed to acquire task assertion
    Failed to fetch GUID schemes from bag
    

    在这里插入图片描述

    解决方法

    按照以下步骤进行操作:

    1. 关闭App Store
    2. 在任务管理器中找到appstoreagent进程,选择:强制退出
      在这里插入图片描述
      在这里插入图片描述
    3. 开启App Store
    4. 尝试升级或下载某一app
    5. 在任务管理器中强制关闭appstoreagent几次,会发现app已经能够正常下载了。

    至此,App Store已经可以正常下载软件了。

    展开全文
  • 一款在PC上实时监测手机APP协议的软件,并具有按APP分类、流量统计、服务器定位、HTTP指标统计等功能。 以往对APP协议/性能/故障作分析,往往通过手机命令行下tcpdump抓好包,再拷贝到电脑上用Wireshark分析。这个...

    AppMonitor

    功能:

    一款在PC上实时监测手机APP协议的软件,并具有按APP分类、流量统计、服务器定位、HTTP指标统计等功能。

    以往对APP协议/性能/故障作分析,往往通过手机命令行下tcpdump抓好包,再拷贝到电脑上用Wireshark分析。这个过程很麻烦,

    也不够实时,另外Wireshark显示的信息很原始,让故障分析人员很辛苦。本软件让前线分析人员从繁重分析工作中得到部分解脱。


    原理:

    PC UI软件与手端APP通过USB通信,手机上TCPIP包及其所属APP信息通过USB实时转发至PC上。PC UI具有智能协议分析功能。

    支持Android与iOS, 手机需要ROOT或越狱。

    需在手机及PC上安装相应软件,PC与手机通过USB线通信。


    关键字:

    Android抓包   iOS抓包   APP  性能分析  协议分析  故障分析


    界面:

    实时抓包界面


    图表界面



    使用场景:

    (1)    APP上网性能分析。

    比如:在某市中国移动网络访问苹果应用商店加载时间过长,可用来定位是DNS解析慢? TCP握手慢?资源服务器定位在国外?

     

    (2)    无线网络优化路测仪表分析

    无线路测优表会吐出KPI参数,当对此参数有异议时,可用此软件方便分析HTTP瀑布图指标。比如某市移动网络流媒体测试vMos分低。

     

    (3)    APP协议分析。

    想了解某款APP其协议过程。


    安装说明:

    需在PC上安装 软件,手机上也需要安装APP,PC与手机通过USB线连接。

    以下所有软件下载地址:http://pan.baidu.com/s/1miKsAlq


    (1)  手机上安装APP

    如想支持Android,下载地址中有apk或扫码安装:

       

    如想支持IOS:通过手机助手iTools将AppMon.ver1.0.deb放在/var/root/Media/Cydia/AutoInstall目录下,重启手机即可。

    (如想支持iOS, 手机助手iTools必须安装,用到里面的驱动)

     

    (2)  PC端软件安装

    appmon_1.0.0.zip解压缩至d:\appmon目录下(其他目录也行,但中文目录或空格目录可能有问题),点击AppMonitor.exe即可运行。不能运行会提示缺少net framework4.5,下载地址中有。

     

    使用说明:

    (1)    使用前看下打开手机APP,点Start启动服务。默认是界面打开时服务就已经启动的。

    如果运行中出错,可以尝试重新启动服务。


    (2)运行PC软件AppMonitor.exe,点击菜单项:监测->连接设备

    弹出设备管理对话框,点击刷新,选中设备点击连接。

    连接成功后,就可以点周“开始监测”,正式抓包显示了。

    如果设备连接不上,则可能是ADB驱动没有装好。装个手机助手。


    (3)   其他功能:

    抓包自动新建工程文件,并保存到[安装目录]/data/目录下。抓包结束后可以用'打开工程"来回放分析。

    打开工程即可以打开pwz文件,也可以打开pcap文件。实时抓包时可以对APP过滤,不想刷屏时可以点Lock等。


    更新历史:

    1.1.0701--

    基本功能


    本软件是本人利用业余时间开发,还在完善中,欢迎试用及留言。

    QQ: 1710450259

    QQ群:573358539

    邮箱: duowei_soft@189.cn






    展开全文
  • MSN聊天监控, QQ监控软件,禁止BT等下载工具,监控邮件,部署百络网警局域网监控软件,加强对员工上网行为管理,提高网络效率!
  • 网上约车、购物、叫外卖、导航……从早上睁眼到晚上睡觉,我们每时每刻都在享受着手机App带来的便利。但与此同时,你的微信昵称、头像、位置、通讯录、电子邮箱信息、QQ账号密码,甚至身份证号码、银行账户都“祼奔...
  • 首先我们要弄明白,防火墙将怎么对待 这些数据包。这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入INPUT链,从我们的计算机发出的数据包会经过 OUTPUT链,如果一台计算机做一个网络的...
  • 简单好用的控制程序联网软件,可以设置允许禁止某个或多个程序上网操作。
  • 上邦内网桌面管理软件是由济南上邦公司打造的电脑远程监控软件,上邦内网桌面管理软件能够实时监控电脑上网行为,包括U盘设备、USB插入等等,帮助企业规范员工上网行为。 软件介绍 上邦内网桌面管理软件能够全面...
  • 原生APP和Web APP的区别

    千次阅读 2015-09-20 00:37:08
    Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS、Android等不同的手机操作系统要采用不同的语言和框架进行开发,该模式通常是由“云服务器数据+APP应用客户端”两部份构成,APP应用...
  • APP开发模式通常分为Web APP与Native APP原生模式两种,这两种模式均各自有自己的优势,到底是采用Native App开发还是采用Web App开发一直是业界争论的焦点,但是随着HTML5的发展及云服务普及,采用HTML5进行Web App...
  • 手机连着路由器的无线网,能够上网,但是不能下载appStore里的软件,是不是管理员对路由器进行了什么设置,我该怎么做才能越过管理员做的限制?
  •  对于一个苹果iOS系统的用户来讲,最痛苦的事情莫过于下载iTunes AppStore中软件时漫长的等待时间,特别是对于那些不喜欢越狱使用正版的用户以及限时免费党们。如果软件较小还好办,多等一会就好了,但是对于那些...
  • 防共享识别和控制技术2.1PC间共享解决方案NAT共享上网场景PC与PC间共享场景(一)PC与PC共享场景(二)PC与PC共享场景(三)2.2传统防共享技术ID轨迹检测时钟偏移检测其他传统的防共享技术深信服DPI检测技术QQ检测防...
  • 熊猫吃短信app是一款值得推荐的垃圾短信过滤应用,有了熊猫吃短信app,从此免受垃圾短信的骚扰,还你干净舒适的手机上网环境,熊猫吃短信app基于机器学习,只要你愿意,它就可以不断学习到新的垃圾短信模式,杀短信...
  • Web App、 Native App、混合型 App的选择

    千次阅读 2015-12-21 15:15:03
    作为产品你需要知道的关于Web App、 Native App、混合型 App的选择
  • 原生APP与web APP的区别

    2019-02-19 11:19:19
    定义,什么是原生APP和web APP?  Web App  Web App即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发具有跨平台的优势,该模式通常由“HTML5云网站+APP应用客户端”两部份构成,APP应用客户端只需安装...
  • App隐私条款

    2019-04-19 09:08:00
    进入本app则意味着您将同意遵守本协议下全部规定,并完全服从于app开发者的统一管理。 第一章总则 第1条本appapp开发者向用户提供的信息存储空间,为用户提供讨论、交流的平台。 第2条本app所有权、经营权、...
  • 系统通过提供强大的日志分析功能,对网络活动行为进行综合分析和挖掘,从中分析出上网人员的行为特点,进一步有针对性的加强网络管理,功能多样化,能充分满足企业、机关和学校对网络管理的需求。
  • 移动手机app开发

    千次阅读 2014-12-04 22:01:46
    App开发,是指专注于手机应用软件开发与服务。 App是application的缩写,通常专指手机上的应用软件,或称手机客户端。另外目前有很多在线app开发[1] 平台,比如应用之星平台很好用。 App开发,是指专注于手机应用...
  • 原生App 与 移动Web App

    2016-02-16 14:39:22
    原生App是专门针对某一类移动设备而生的,它们都是被直接安装到设备里,而用户一般也是通过网络商店或者卖场来获取例如 The App Store 与 Android Apps on Google Play . 随便说几个原生App的例子,比如 iOS 的 ...
  • 国家互联网信息办公室有关负责人表示,出台《规定》旨在加强对移动互联网应用程序(APP)信息服务的规范管理,促进行业健康有序发展,保护公民、法人和其他组织的合法权益。 国家互联网信息办公室有关负责人介绍,...
  • 范围 开发单位统筹建设的 1 款移动 APP 软件包括 APP 内嵌的安卓 版和 IOS 版应用以及 APP 管理平台 实施内容 随着互联网时代的到来智能手机和 iPad 等移动终端设备越来 越普及人们逐渐习惯了使用应用客户端上网的...
  • APP测试方法

    千次阅读 2019-03-29 02:15:26
    1. APP测试方法 1.1. 一、安装、卸载测试 1.1.1. 验收标准 验证App是否能正确安装、运行、卸载、以及操作过程和操作前后对系统资源的使用情况 1.1.2. 测试点 1. 安装 软件安装后是否能够正常运行,安装后的...
  • 解决浏览器能上网而其他软件无法联网的问题

    万次阅读 多人点赞 2018-10-31 15:48:13
    今天遇到一个朋友电脑出现一个问题,只有win10自带的浏览器能上网打开网页,其他软件均和应用程序都连不上网,最后苦寻解决的办法,功夫不负有心人,终于被我找到了解决的办法。 想到应该是Winsock协议配置有问题,...
  • 有哪些好用的电脑桌面分类管理软件?我们很多小伙伴在手机上会对各种APP进行分类管理,比如购物、社交、影音等。每次想打开什么什么软件一下子就能找到,不会因为软件过多而影响效率。但很多人在电脑上却没有这种习惯...
  • 此款软件功能强大,是家长监管未成年人上网的好帮手。 提高软件的自我保护 健康上网专家具有文件保护、进程保护和安全模式加载等安全特性,在Windows平台下可以很好的保证软件的安全。除此之外,软件还提供一些安全...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,206
精华内容 4,882
关键字:

上网管理软件app