index.uts 7.7 KB
Newer Older
杜庆泉's avatar
杜庆泉 已提交
1 2 3 4 5
import Color from "android.graphics.Color";
import TextView from "android.widget.TextView";
import FrameLayout from "android.widget.FrameLayout";
import ViewGroup from "android.view.ViewGroup";
import Gravity from "android.view.Gravity";
杜庆泉's avatar
杜庆泉 已提交
6 7
import Runnable from 'java.lang.Runnable';
import MediaPlayer from 'android.media.MediaPlayer';
杜庆泉's avatar
杜庆泉 已提交
8
import Intent from 'android.content.Intent';
杜庆泉's avatar
杜庆泉 已提交
9

杜庆泉's avatar
杜庆泉 已提交
10
import logo from "../../static/logo.png";
杜庆泉's avatar
杜庆泉 已提交
11
import PackageManager from "android.content.pm.PackageManager";
杜庆泉's avatar
杜庆泉 已提交
12 13 14 15 16 17
import MediaStore from "android.provider.MediaStore";
import ActivityCompat from "androidx.core.app.ActivityCompat";
import Manifest from "android.Manifest";
import Activity from "android.app.Activity";
import Bitmap from "android.graphics.Bitmap";
import FileOutputStream from "java.io.FileOutputStream";
杜庆泉's avatar
杜庆泉 已提交
18 19 20 21 22 23

import {
    onAppActivityDestroy,
    onAppActivityPause,
    onAppActivityResume,
    onAppActivityBack,
杜庆泉's avatar
杜庆泉 已提交
24 25 26
	onAppActivityResult,
	onAppTrimMemory,
	onAppConfigChange,
杜庆泉's avatar
杜庆泉 已提交
27 28 29 30
	getUniActivity,
	getAppContext
} from "io.dcloud.uts.android";

31

杜庆泉's avatar
杜庆泉 已提交
32 33 34
/**
 * 定时任务参数封装
 */
杜庆泉's avatar
杜庆泉 已提交
35
type TimerOptions = {
36 37 38 39 40 41 42 43 44 45
	/**
	 * 定时任务开始的回调
	 * @res 回调参数
	 */
	start: (res: string) => void;
	/**
	* 定时任务执行的回调
	* @res 回调参数
	*/
	work: (res: string) => void;
杜庆泉's avatar
杜庆泉 已提交
46 47 48
};


杜庆泉's avatar
杜庆泉 已提交
49 50 51
/**
 * 执行延时任务
 */
杜庆泉's avatar
杜庆泉 已提交
52 53 54 55 56 57 58 59 60
export function doTimerTask(opts:TimerOptions) {
	opts.start('doTimerTask start');
	setTimeout(function() {
		opts.work("doTimerTask work");
	}, 2000);
  
  return { name: "doTimerTask" };
}

杜庆泉's avatar
杜庆泉 已提交
61 62 63
/**
 * 执行周期任务
 */
杜庆泉's avatar
杜庆泉 已提交
64 65
export function doIntervalTask(opts:TimerOptions) {
	
杜庆泉's avatar
杜庆泉 已提交
66
	let taskRet = setInterval(function() {
杜庆泉's avatar
杜庆泉 已提交
67 68 69 70 71 72 73
		opts.work("doIntervalTask work");
	}, 2000);
	opts.start('doIntervalTask start');
  
  return { name: "doIntervalTask",taskId:taskRet};
}

杜庆泉's avatar
杜庆泉 已提交
74 75 76
/**
 * 清除周期任务
 */
杜庆泉's avatar
杜庆泉 已提交
77 78 79
export function clearIntervalTask(taskId:number) {
	
	clearInterval(taskId);
80
	return { name: "clearIntervalTask"};
杜庆泉's avatar
杜庆泉 已提交
81 82 83
}


84 85 86 87
/**
 * 实现一个添加view的 Runnable类
 * 用法说明:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB
 */
杜庆泉's avatar
杜庆泉 已提交
88 89 90 91
class AddUIRunnable extends Runnable {

    override run():void {
		
杜庆泉's avatar
杜庆泉 已提交
92 93 94
        let textView = new TextView(getUniActivity())
        textView.setText("HELLO WORLD");
        textView.textSize = 30.0.toFloat();
杜庆泉's avatar
杜庆泉 已提交
95
        textView.setBackgroundColor(Color.RED)
杜庆泉's avatar
杜庆泉 已提交
96 97
        textView.setTag("helloText")
        textView.setGravity(Gravity.CENTER)
杜庆泉's avatar
杜庆泉 已提交
98

杜庆泉's avatar
杜庆泉 已提交
99
        let decorView = getUniActivity()!.window.decorView;
杜庆泉's avatar
杜庆泉 已提交
100 101


杜庆泉's avatar
杜庆泉 已提交
102
        let frameContent = decorView.findViewById<FrameLayout>(android.R.id.content)
杜庆泉's avatar
杜庆泉 已提交
103
        let layoutParam = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
杜庆泉's avatar
杜庆泉 已提交
104 105
        layoutParam.topMargin = 200;

杜庆泉's avatar
杜庆泉 已提交
106
        frameContent.addView(textView,layoutParam)
杜庆泉's avatar
杜庆泉 已提交
107 108 109 110

    }
};

111 112 113 114
/**
 * 实现一个移除view的 Runnable类
 * 用法说明:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB
 */
杜庆泉's avatar
杜庆泉 已提交
115 116 117 118
class RemoveUIRunnable extends Runnable {

    override run():void {

杜庆泉's avatar
杜庆泉 已提交
119
        let decorView = getUniActivity()!.getWindow().getDecorView();
杜庆泉's avatar
杜庆泉 已提交
120
        let frameContent = decorView.findViewById<FrameLayout>(android.R.id.content)
杜庆泉's avatar
杜庆泉 已提交
121 122 123
		
		let targetTV = frameContent.findViewWithTag<TextView>("helloText")
		frameContent.removeView(targetTV)
杜庆泉's avatar
杜庆泉 已提交
124 125 126 127

    }
};

128 129 130 131
/**
 * 实现添加view实例至decorview
 * 
 */
杜庆泉's avatar
杜庆泉 已提交
132
export function addViewToDecorView() {
杜庆泉's avatar
杜庆泉 已提交
133
    let uiRunable = new AddUIRunnable();
杜庆泉's avatar
杜庆泉 已提交
134 135 136
    getUniActivity()!.runOnUiThread(uiRunable)

}
137 138 139
/**
 * 实现从decorview上移除指定view
 */
杜庆泉's avatar
杜庆泉 已提交
140
export function removeViewToDecorView() {
杜庆泉's avatar
杜庆泉 已提交
141
    var uiRunable = new RemoveUIRunnable();
杜庆泉's avatar
杜庆泉 已提交
142 143 144 145
    getUniActivity()!.runOnUiThread(uiRunable)
}


杜庆泉's avatar
杜庆泉 已提交
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169



/**
 * 引用资源路径
 */
export function getMetaConfig(): string {
	//
	let packageName = getAppContext()!.getPackageName();
	let appInfo = getAppContext()!.getPackageManager()!.getApplicationInfo(packageName,PackageManager.GET_META_DATA)
	
	let metaData = appInfo.metaData
	if (metaData == null) {
		 return "";
	}
	let adId = metaData.getString("DCLOUD_READ_PHONE_STATE")
	if (adId == null) {
		 return "";
	}
    return adId;
}



170 171 172
/**
 * 引用资源路径
 */
杜庆泉's avatar
杜庆泉 已提交
173 174 175 176
export function getLogoPath(): string {
  return logo;
}

177 178 179
/**
 * 播放asset资源中的音频
 */
杜庆泉's avatar
杜庆泉 已提交
180
export function playAssetAudio() {
杜庆泉's avatar
杜庆泉 已提交
181
	
杜庆泉's avatar
杜庆泉 已提交
182 183 184
	let assetManager = getAppContext()!.getAssets();
	let afd = assetManager.openFd("free.mp3");
	let mediaPlayer = new MediaPlayer();
杜庆泉's avatar
杜庆泉 已提交
185 186 187 188 189 190
	mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
	mediaPlayer.prepare();
	mediaPlayer.start();
	
}

杜庆泉's avatar
杜庆泉 已提交
191

杜庆泉's avatar
杜庆泉 已提交
192 193 194 195 196 197 198 199 200 201
export function goOtherActivity(imageDone: (event:string) => void):boolean {
	
	// 检查相关权限是否已经具备
	if (ActivityCompat.checkSelfPermission(getUniActivity()!, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
		// 不具备权限,申请权限,并且告知用户监听失败
		ActivityCompat.requestPermissions(getUniActivity()!, arrayOf(Manifest.permission.CAMERA), 1002)
		
		return false;
	}
	
202 203 204 205 206 207 208 209 210 211 212 213 214 215
	onAppActivityResult((requestCode: Int, resultCode: Int, data?: Intent) => {
		let eventName = "onAppActivityResult  -  requestCode:" + requestCode + " -resultCode:"+resultCode + " -data:"+JSON.stringify(data);
	    console.log(eventName);
		if ((requestCode == 1001) && (resultCode == Activity.RESULT_OK)) {
		    if (data != null) {    
			  let bundle = data.getExtras(); 
			  let mImageBitmap = bundle!.get("data") as Bitmap;
			  let bitmapPath = getUniActivity()!.getExternalCacheDir()!.getPath() + "/photo.png"
			  console.log(bitmapPath);
			  try{
				  mImageBitmap.compress(Bitmap.CompressFormat.PNG,100,new FileOutputStream(bitmapPath))
			  }catch(e){
			  }
			  imageDone(bitmapPath);
杜庆泉's avatar
杜庆泉 已提交
216
			 
217 218 219
		    }
		  }
	});
杜庆泉's avatar
杜庆泉 已提交
220 221 222 223 224 225 226 227 228 229
	
	let takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	//resolveActivity 返回可处理 Intent 的第一个 Activity 组件
	if (takePictureIntent.resolveActivity(getUniActivity()!.getPackageManager()) != null) {
		getUniActivity()!.startActivityForResult(takePictureIntent, 1001);
	}
	
	return true;
	
}
杜庆泉's avatar
杜庆泉 已提交
230 231


232 233 234 235
/**
 * 初始化应用生命周期监听
 * 
 */
杜庆泉's avatar
杜庆泉 已提交
236
export function initAppLifecycle(onLifecycleChange: (event:string) => void) {
杜庆泉's avatar
杜庆泉 已提交
237

杜庆泉's avatar
杜庆泉 已提交
238

239 240 241 242 243 244 245 246 247
	/**
	 * application 内存不足的回调函数
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onapptrimmemory
	 */
	onAppTrimMemory((level:Number) => {
		let eventName = "onAppTrimMemory - " + level;
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
杜庆泉's avatar
杜庆泉 已提交
248
	
249 250 251 252 253 254 255 256 257
	/**
	 * application 状态改变的回调函数
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onAppConfigChange
	 */
	onAppConfigChange((ret:UTSJSONObject) => {
		let eventName = "onAppConfigChange - " + JSON.stringify(ret);
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
杜庆泉's avatar
杜庆泉 已提交
258 259
	
	
260 261 262 263
	/**
	 * activity 销毁生命周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitydestroy
	 */
杜庆泉's avatar
杜庆泉 已提交
264
    onAppActivityDestroy(() => {
杜庆泉's avatar
杜庆泉 已提交
265
		let eventName = "onAppActivityDestroy";
杜庆泉's avatar
杜庆泉 已提交
266 267
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
268
    });
杜庆泉's avatar
杜庆泉 已提交
269 270
	
	
271 272 273 274
	/**
	 * activity 失去焦点生命周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitypause
	 */
杜庆泉's avatar
杜庆泉 已提交
275
    onAppActivityPause(() => {
杜庆泉's avatar
杜庆泉 已提交
276
		let eventName = "onAppActivityPause" ;
杜庆泉's avatar
杜庆泉 已提交
277 278
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
279
    });
280 281 282 283
	/**
	 * activity 得到焦点的周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityresume
	 */
杜庆泉's avatar
杜庆泉 已提交
284
    onAppActivityResume(() => {
杜庆泉's avatar
杜庆泉 已提交
285
		let eventName = "onAppActivityResume";
杜庆泉's avatar
杜庆泉 已提交
286 287
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
288
    });
289 290 291 292
	/**
	 * activity 回退物理按键事件回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityback
	 */
杜庆泉's avatar
杜庆泉 已提交
293
    onAppActivityBack(() => {
杜庆泉's avatar
杜庆泉 已提交
294
		let eventName = "onAppActivityBack";
杜庆泉's avatar
杜庆泉 已提交
295 296
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
297 298 299 300
    });

}