救命啊,Android 7.1以上打开热点

warcraftmgq 2017-12-27 03:43:50
原有WifiManager的setWifiApEnabled已经不起作用了,我搜索网上有两个方案
1,使用WifiManager的startLocalOnlyHotspot方法,但是此方法经测试需要打开定位,不太好。
2,使用ConnectivityManager的startTethering方法,但是此方法是隐藏的,我在网上找了一个别人编译过的jar,开放了此接口,按照网上使用隐藏api导入jar包的方法导入到Android Studio(3.0.1),语法提示是有了,但是编译时不能通过。
app.gradle配置

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
applicationId "com.huazhon.mywifi"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compileOnly files('libs/net.jar')
}


build.grade配置

allprojects {
repositories {
google()
jcenter()
}

gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:/libs/net.jar')
}
}
}


另外已经将app.iml中导入的包顺序放在jdk之前。
但是在编译时报错


到底是哪里的问题?

...全文
1576 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
MSONG93 2019-05-09
  • 打赏
  • 举报
回复
引用 2 楼 qq_38208855 的回复:
太麻烦了。。。直接拿系统签名解决呀。

请问 有办法拿国产机的系统签名吗
qq_39751821 2018-02-22
  • 打赏
  • 举报
回复
@warcraftmgq 出现java.lang.reflect.InvocationTargetException咋回事呢?
kk_lin 2018-02-08
  • 打赏
  • 举报
回复
你好,可以把那个net.jar发一下吧1664341083@qq.com, 谢谢
zhang01 2018-01-30
  • 打赏
  • 举报
回复
楼主,你最后的反射方法中也用到了一个系统隐藏的api:TETHERING_WIFI,咋处理?还是只能去源码区编译?
warcraftmgq 2018-01-04
  • 打赏
  • 举报
回复
看ConnectivityManager得知里面是调用IConnectivityManager接口的startTethering接口实现的,所以就简单了,直接反射

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
                Field iConnMgrField = connManager.getClass().getDeclaredField("mService");
                iConnMgrField.setAccessible(true);
                Object iConnMgr = iConnMgrField.get(connManager);
                Class<?> iConnMgrClass = Class.forName(iConnMgr.getClass().getName());
                Method startTethering = iConnMgrClass.getMethod("startTethering", int.class, ResultReceiver.class, boolean.class);
                startTethering.invoke(iConnMgr, TETHERING_WIFI, new ResultReceiver(new Handler()) {
                    @Override
                    protected void onReceiveResult(int resultCode, Bundle resultData) {
                        super.onReceiveResult(resultCode, resultData);
                    }
                }, true);
                return true;

            } else {
                Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
                return (boolean) method.invoke(wifiManager, config, true);
            }
majing18888 2018-01-02
  • 打赏
  • 举报
回复
楼主大大,最后是怎么解决的能否告知?
warcraftmgq 2017-12-28
  • 打赏
  • 举报
回复
不折腾了,最后我还是用反射获取IConnectivityManager接口来完成的
qq_38208855 2017-12-28
  • 打赏
  • 举报
回复
太麻烦了。。。直接拿系统签名解决呀。
zosky 2017-12-27
  • 打赏
  • 举报
回复
帮顶,,,,,,,

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧