Android应用是否安装判断

另外manifest里面需要添加
<queries>
    <package android:name="com.edutech.liveapp"/>
</queries>
private boolean isAppInstalled(Context context, String packagename)
 {
 PackageInfo packageInfo;
 try {
 packageInfo = context.getPackageManager().getPackageInfo(packagename, 0);
 }catch (PackageManager.NameNotFoundException e) {
 packageInfo = null;
 e.printStackTrace();
// Toast.makeText(this,packagename+":"+e.getMessage(),Toast.LENGTH_LONG).show();
 }
 if(packageInfo ==null){
 //System.out.println("没有安装");
 return false;
 }else{
 //System.out.println("已经安装");
 return true;
 }
 }

最大连续乘积子串

/**
* 常规穷举法
*/
fun maxContinueProduce_fun1(intAttrs: MutableList): Double {
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxValue = intAttrs[0] var minIndex = 0 var maxIndex = 0 for (i in 0..intAttrs.size-1) { var value = intAttrs[i] for (j in i+1..intAttrs.size-1) { value = value * intAttrs[j] if (value>maxValue) {
maxValue = value
minIndex = i
maxIndex = j
}
}
}
println(“value:”+maxValue+”,min:”+minIndex+”,max:”+maxIndex)
return maxValue
}
/**
* 乘积可以为0,负数和正数
* 负数乘负数得正,也可能产生最大乘积
*/
fun maxContinueProduce_fun2(intAttrs: MutableList): Double{
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxProduce = 1.0 var minProduct = 1.0 var maxCurrent = maxProduce var minCurrent = minProduct var index = 0 var minindex = 0 // 找到最大乘积 已经最大index for (i in 0..intAttrs.size-1) { maxCurrent = intAttrs[i]*maxCurrent minCurrent = intAttrs[i]*minCurrent if (maxCurrent>maxProduce) {
maxProduce = maxCurrent
index = i
}
if (minCurrent>maxProduce) {
maxProduce = minCurrent
index = i
}
if (maxCurrent<minProduct) {
minProduct = maxCurrent
}
if (minCurrent<minProduct) { minProduct = minCurrent } if (minCurrent>maxCurrent) {
var temp = minCurrent
minCurrent = maxCurrent
maxCurrent = temp
}
if (maxCurrent<1) {
maxCurrent = 1.0
}
}

// 通过最大index和最大乘积计算最小index
var temp = 1.0
for (i in index downTo 0) {
temp *= intAttrs[i]
if (temp==maxProduce) {
minindex=i
break
}
}
println(“value:”+maxProduce+”,min:”+minindex+”,max:”+index)
return maxProduce
} Continue reading “最大连续乘积子串”

字符串编辑距离:计算最小操作数

/**
* 首先用0填充attrs[i][j],生成距离存储集合
* 先将最大距离填充到行首和列首
* 如果s[i-1]==t[j-1]则编辑距离不需要增加,editAttrs[i][j]==editAttrs[i-1][j-1]
* 如果二者不相等,则取前面三种编辑方式中最小距离加1,因为只需要在上一步最优方式中操作一次(增加/删除/补空)就可以
* editAttrs[i][j] = min(editAttrs[i-1][j-1],editAttrs[i][j-1],editAttrs[i-1][j])
*/
fun minStepForEdit(sourceStr: String, targerStr: String): Int {
var stepCount = 0
var editAttrs = mutableListOf<MutableList>()
println(sourceStr)
println(targerStr)

// 如果i从sourceStr开始,则下方双for循环也需要从sourceStr开始
// 如果i从targetStr开始,则下方双for循环也需要从targetStr开始
// 这二者对应就可以
for (i in 0..targerStr.length) {
var tempMulti = mutableListOf()
for (j in 0..sourceStr.length) {
tempMulti.add(0)
}
editAttrs.add(tempMulti)
}
for (i in 0..targerStr.length) {
editAttrs[i][0] = i
}
for (i in 0..sourceStr.length) {
editAttrs[0][i] = i
}
for (i in 1..targerStr.length) {
for (j in 1..sourceStr.length) {
if (targerStr[i-1].equals(sourceStr[j-1])) {
editAttrs[i][j] = editAttrs[i-1][j-1]
} else {
var count = if (editAttrs[i][j-1]>editAttrs[i-1][j]) {
if (editAttrs[i-1][j-1]<editAttrs[i-1][j]) {
editAttrs[i-1][j-1] + 1
} else {
editAttrs[i-1][j] + 1
}
} else {
if (editAttrs[i-1][j-1]<editAttrs[i][j-1]) {
editAttrs[i-1][j-1] + 1
} else {
editAttrs[i][j-1] + 1
}
}
editAttrs[i][j] = count
}
}
}
stepCount = editAttrs[targerStr.length][sourceStr.length]
editAttrs.forEach {
var values = it
values.forEach {
print(it)
print(” “)
}
println()
}
return stepCount
}

Android WebView内跳转链接

mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onCreateWindow(WebView webView, boolean b, boolean b1, Message message) {
Log.e(“webview”,”onCreateWindow:”+b+”,”+b1);
Log.e(“webview”,”onCreateWindow:”+webView.getUrl());
WebView.WebViewTransport transport = (WebView.WebViewTransport) message.obj;
transport.setWebView(mWebView); //此webview可以是一般新创建的
message.sendToTarget();
return false;
}
});