工具:Android Studio
在创建了默认的项目后,在引用zxing以及修改gradle方面,有很多地方要修改。特此记录:
1.将zxing的jar包core_3.2.0.jar复制到lib(要切换到project视图才能看到,注意不是libs)
2.修改buld.gradle(Module:app)文件,增加引用:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation files('D:/Develop/Android2/lib/core_3.2.0.jar')
compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
implementation files('libs/AMap_Location_V4.2.0_20180809.jar')
}
修改文件后,点工具栏上的sync,这样修改的gradle才会立即生效。
3.在编译时会报开发项目和测试项目的版本不一致错误:
Conflict with dependency 'com.android.support:support-annotations' in project ':app'.
仍然是在上述gradle文件中修改配置:
}
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
在使用lamda表达式时会报不支持错误,仍然修改上述gradle配置文件:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
}
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'
}
至此,项目基本可以正确编译了。代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnScan=findViewById(R.id.btnScan);
btnScan.setOnClickListener((v)->{
Toast.makeText(MainActivity.this,"扫描二维码",Toast.LENGTH_SHORT).show();
IntentIntegrator integrator=new IntentIntegrator(MainActivity.this);
integrator.initiateScan();
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
IntentResult scanResult =IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
if (scanResult !=null){
String result=scanResult.getContents();
Toast.makeText(this,result,Toast.LENGTH_LONG).show();
}
}
生成发布到手机后,会报没有权限问题,先在AndroidManifest增加权限要求:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.android2">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- 允许程序设置内置sd卡的写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许程序获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 允许程序访问WiFi网络信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 允许程序读写手机状态和身份 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
然后手机的设置--应用管理里,找到生成的APP,然后给它所有权限。
至此全部完成,效果图: