Android开发-魔窗DeeplinkDemo-AndroidStudio

转载请注明出处: http://blog.csdn.net/iwanghang/article/details/70238463
觉得博文有用,请点赞,请评论,请关注,谢谢!~


老规矩,先上GIF动态图,看个效果,如果符合你的项目或者确定你要了解的内容,再往下看吧:




1、注册魔窗账号:

http://mgnt.magicwindow.cn/

2、新增产品:

2.1、Android 应用名称:随便写

2.2、Android 包名:要写对

2.3、Android URI Scheme:随便写,注意全小写,但是要记住(Demo的URI Scheme是:mwshowbywh://)

2.4、Android 下载地址:随便写

2.5、iOS:这里不演示,但是有必填选项,随便敲几个字母即可

2.6、Android 系统分配一个App Key,请记住(Demo的App Key是:68JWNQRU1KOGF124040VES4XH51BF5VN)



3、添加mLink:

3.1、mLink服务名称:随便写,比如 帖子页面、商品页面

3.2、mLink服务key:随便写,注意必须全小写,比如bbs、goods

3.3、Android URI:我不知道什么要这么写,开发文档提供的格式,照搬吧,比如:bbs?name=:name、goods?name=:name

3.4、系统分配默认短连接:帖子页面:https://a.mlinks.cc/AK7F、商品页面:https://a.mlinks.cc/AKoU




4、完事了,上代码:

4.1、导入jar包:

http://www.magicwindow.cn/download.html
https://sdk.mlinks.cc/MW_SDK_ANDROID_3.9.161221.zip

4.2、build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.iwanghang.myapplication"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    // 魔窗
    flatDir {
        dirs'libs'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.0'
    testCompile 'junit:junit:4.12'
    compile files('libs/libammsdk.jar')
    // 魔窗
    compile(name:'MagicWindowSDK', ext:'aar')
}

4.3、AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iwanghang.myapplication">

    <!-- 访问网络 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 获取WIFI信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 允许访问GPS -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 允许应用程序写数据到外部存储设备(主要是SD卡) -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 在sdcard中创建/删除文件的权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 请求访问使用照相设备 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- 开启闪光灯权限 -->
    <uses-permission android:name="android.permission.FLASHLIGHT" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.camera.flash" />

    <!-- 魔窗权限 -->
    <!-- 连接互联网Internet权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 允许应用程序联网,以便向我们的服务器端发送数据。 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 判断程序是否在前台运行,必须 -->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <!-- 检测手机基本状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 缓存资源优先存入SDcard -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".SplashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- 以下是魔窗信息 -->
            <intent-filter>
                <data android:scheme="mwshowbywh" />

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity>
        <!-- 以下是魔窗信息 -->
        <!-- 总的activity,必须注册!!! -->
        <activity
            android:name="com.zxinsight.common.base.MWActivity"
            android:configChanges="orientation|keyboardHidden|screenSize|navigation"
            android:exported="true" />
        <!-- 微信分享回调(教程没有演示 by iwanghang) -->
        <!-- <activity android:name=".wxapi.WXEntryActivity" -->
        <!-- android:theme="@android:style/Theme.Translucent.NoTitleBar" -->
        <!-- android:configChanges="keyboardHidden|orientation|screenSize" -->
        <!-- android:exported="true" -->
        <!-- android:launchMode="singleTop" /> -->
        <!-- MW sdk ID 此处跟activity同级,需要放在Application内,MW_APPID(也就是后台的” 魔窗AppKey”)不能更改 -->
        <meta-data
            android:name="MW_APPID"
            android:value="68JWNQRU1KOGF124040VES4XH51BF5VN" />
        <!-- 渠道名称MW_CHANNEL不能更改 -->
        <meta-data
            android:name="MW_CHANNEL"
            android:value="渠道中文随便写" />
        <!-- 以上是魔窗信息 -->

        <activity android:name=".GoodsActivity" />
        <activity android:name=".MainActivity" />
        <activity android:name=".BbsActivity"></activity>
    </application>

</manifest>

4.4、SplashActivity(欢迎页面):

package com.iwanghang.myapplication;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.zxinsight.MLink;
import com.zxinsight.MWConfiguration;
import com.zxinsight.MagicWindowSDK;
import com.zxinsight.Session;
import com.zxinsight.mlink.MLinkCallback;
import com.zxinsight.mlink.MLinkIntentBuilder;

import java.util.Map;

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        // 初始化魔窗
        initMW();

        // 初始化魔窗 跳转router调用
        if (getIntent().getData()!=null) { // 如果不为空,说明是通过scheme跳转进来的
            MLink.getInstance(this).router(getIntent().getData());
            // 初始化魔窗 跳转后结束当前activity
            finish();
        } else {
            //TODO:动画等耗时操作结束后再调用checkYYB(),一般写在starActivity前即可
            MLink.getInstance(this).checkYYB();
            gotoHome(); // 如果有欢迎页面(闪屏页 开屏页面 需要这个方法)
            //register (this);
        }

    }

    /**
     * 初始化魔窗
     */
    private void initMW() {
        MWConfiguration config = new MWConfiguration(this);

//        设置渠道,非必须(渠道推荐在AndroidManifest.xml内填写)
//        config.setChannel("你的渠道名称")
//                //开启Debug模式,显示Log,release时注意关闭
//                .setDebugModel(true)
//                //带有Fragment的页面。具体查看2.2.2
//                . setPageTrackWithFragment(true)
//                //设置分享方式,如果之前有集成sharesdk,可在此开启
//                . setSharePlatform (MWConfiguration. ORIGINAL);

        config.setDebugModel(true)
                . setSharePlatform (MWConfiguration. ORIGINAL);

        MagicWindowSDK.initSDK(config);

        MLink.getInstance(this).registerWithAnnotation(this);

        // 初始化魔窗 MLink注册
        MLink.getInstance(this).router(this, getIntent().getData());
    }

    private void gotoHome() {
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }

    private void register(Context context){
        MLink.getInstance(context).registerDefault(new MLinkCallback() {
            @Override
            public void execute(Map paramMap, Uri uri, Context context) {
                //HomeActivity 为你的首页
                MLinkIntentBuilder.buildIntent(paramMap, context, MainActivity.class);
            }
        });
        // mLinkKey:  mLink 的 key, mLink的唯一标识
        MLink.getInstance(context).register("goods", new MLinkCallback() {
            public void execute(Map paramMap, Uri uri, Context context) {
                MLinkIntentBuilder.buildIntent(paramMap, context, GoodsActivity.class);
            }
        });
    }

    @Override
    protected void onPause() {
        // 魔窗所需 Session为基础功能,必须集成,否则无法获取到活动。
        Session.onPause(this);
        super.onPause();
    }

    @Override
    protected void onResume() {
        // 魔窗所需 Session为基础功能,必须集成,否则无法获取到活动。
        Session.onResume(this);
        super.onResume();
    }

}

4.5、MainActivity:

package com.iwanghang.myapplication;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.zxinsight.mlink.annotation.MLinkDefaultRouter;

/**
 * 魔窗 在程序主页(默认页面)如下注册:
 * @MLinkDefaultRouter
 */
@MLinkDefaultRouter
public class MainActivity extends AppCompatActivity {

    private Button button_goto_goods;
    private Button button_mc_goto_goods;
    private Button button_goto_bbs;
    private Button button_mc_goto_bbs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 商品页面
        button_goto_goods = (Button) findViewById(R.id.button_goto_goods);
        button_goto_goods.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, GoodsActivity.class);
                MainActivity.this.startActivity(intent);
            }
        });

        button_mc_goto_goods = (Button) findViewById(R.id.button_mc_goto_goods);
        button_mc_goto_goods.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("https://a.mlinks.cc/AKoU");
                Intent it = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(it);
            }
        });


        // 帖子页面
        button_goto_bbs = (Button) findViewById(R.id.button_goto_bbs);
        button_goto_bbs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, GoodsActivity.class);
                MainActivity.this.startActivity(intent);
            }
        });

        button_mc_goto_bbs = (Button) findViewById(R.id.button_mc_goto_bbs);
        button_mc_goto_bbs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("https://a.mlinks.cc/AK7F");
                Intent it = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(it);
            }
        });


    }

}

4.6、GoodsActivity:

package com.iwanghang.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.zxinsight.mlink.annotation.MLinkRouter;

/**
 * 测试商品页面
 * 魔窗 在程序除了主页以外的所有页面 如下注册:
 * @MLinkRouter
 *
 * //其中 mLinkKey1和 mLinkKey2是此页面的 mLink Key。如果只有一个,写一个即可。
 *  @MLinkRouter(keys={"mLinkKey1"," mLinkKey2"})
 */
@MLinkRouter(keys={"goods"})
public class GoodsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods);
    }
}

4.7、BbsActivity:

package com.iwanghang.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.zxinsight.mlink.annotation.MLinkRouter;

/**
 * 帖子商品页面
 * 魔窗 在程序除了主页以外的所有页面 如下注册:
 * @MLinkRouter
 *
 * //其中 mLinkKey1和 mLinkKey2是此页面的 mLink Key。如果只有一个,写一个即可。
 *  @MLinkRouter(keys={"mLinkKey1"," mLinkKey2"})
 */
@MLinkRouter(keys={"bbs"})
public class BbsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bbs);
    }
}


项目打包下载:http://download.csdn.net/detail/iwanghang/9818995


转载请注明出处:http://blog.csdn.net/iwanghang/article/details/70238463




欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式

微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com



觉得博文有用,请点赞,请评论,请关注,谢谢!~

简明、完整、全面的安卓开发demo集合,包含如下示例 1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、ToggleButton 动态布局效果 9、AnalogClock 、 DigitalClock and Chronometer 时钟和数字日期 10、AutoCompleteTextView 根据输入自动补充可能的全部 11、Spinner View 选择框(弹出框形式选择) 12、DatePicker TimePicker View 日期时间选择器 13、ProgressBar View 普通进度条、显示在标题栏上的进度条 14、RatingBar View 评级 15、 SeekBar 拖动条,音量调节效果 16、ScrollView 、HorizontalScrollView 垂直和水平滚动条 17、ScrollView 、HorizontalScrollView 垂直和水平滚动条 18、ExpandableListView 分组可展开收缩的ListView 19、Notification 状态栏通知 20、GridView、ImageSwitcher 21、SmsManager 消息管理器,发短信(这里是模拟器只能给其它模拟器发短信) 22、Intent Action、Category属性 测试 23、系统 Action、Category属性 24、ClipDrawable 徐徐展开的风景 25、AnimationDrawable 会动的图片 26、Menu、SubMenu、ContextMenu xml配置menu 27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据存取 32、SQLiteDatabase 安卓客户端的嵌入式数据库 33、GestureDetector + ViewFlipper实现翻页效果 34、GestureLiberay 自定义手势 35、GestureLiberay 通过自定义的手势实现用户操作 36、TextToSpeech 语音朗读 37、ContentProvider、ContentResolver 应用之间共享数据 38、 Service 相当于没有界面的activity 39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯 45、下载状态栏显示下载进度 46、Gallery3d效果 47、ListView 上拉加载更多效果 48、异步加载图片的二级缓存技术 49、QQ的好友列表展示效果 50、Fragment + ViewPager实现tab滑动切换 51、能够显示在桌面前面的的歌词效果 52、activity切换特效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值