顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2018年11月12日 星期一

[Android] WebView內嵌Youtube無法全螢幕的解決方式

開發WebView的時候,卻發現,網頁上如果有 Youtube的影片,可以正常播放,但卻無法全螢幕,找了許久,找到了解法。

2016年4月22日 星期五

Android 強制顯示鍵盤

之前在實作有關EditText的頁面時,總覺得要強制顯示鍵盤,很困難,叫它出現不出現,真難控制。

後來才瞭解,原來畫面還沒準備好,就去呼叫強制顯示鍵盤,所以Android根本不理我。
所以必須先讓他等個0.1秒,這樣就可以成功呼叫啦。

final ImputMethodManager imm =
    (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

editText.postDelayed(new Runnable(){
    @Override
    public void run(){
        editText.requestFocus();
        imm.showSoftInput(editText, 0);
    }
}, 100);


如果要隱藏鍵盤就比較單純了。
ImputMethodManager imm =
    (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
IBinder ib = Activity.this.getCurrentFocus().getWindowToken();
imm.hideSoftInputFromWindow(ib, InputMethodManager.HIDE_NOT_ALWAYS);

2015年9月24日 星期四

Android DatePickerDialog Bug


android 內建的 DatePickerDialog 中


  • onDateSet 這個 method 會自動跑兩次,要加 view.isShown 來判斷


private DatePickerDialog.OnDateSetListener startDateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePickerview,intyear,intmonthOfYear,intdayOfMonth) {
if(view.isShown()) {
//onDateSet() 會跑兩次,需要判斷是否已出現
}
}
  • DatePickerDialog background 後面會出現另一個圖層
要加入 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(color.TRANSPARENT));


Android LaunchMode


Activity 在 singleTask 模式下,若再以

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

的方式喚起 Activity,將無法收到新的 Bundle

必須


@Override
protected void onNewIntent(Intent intent) {
     super.onNewIntent(intent);
     setIntent(intent);
     //now getIntent() should always return the last received intent
}

此 Activity 的生命週期為

1.onNewIntent
    
2.onRestart

3.onStart

4.onResume

2015年8月26日 星期三

Android 使用Crashlytics 或是 Fabric遇到Proguard錯誤的解決辦法

如果Android的專案中有用到Crashlytics或是 Fabric的相關Library
在打包APK使用Proguard的話,有可能會出現錯誤

解決的辦法就是在Proguard.cfg中加上忽略Crashlytics和Fabric相關Jar的語法,如下


2015年8月21日 星期五

Android TextView 文字中加入超連結

首先先new 一個SpannableString 將你要顯示的文字加進去,這裏將 Click here 加入。
SpannableString sp = new SpannableString("Click here");

使用setSpan(what, start, end, flags)what 需要new 一個 URLSpan 告訴他你想解決的事,
new URLSpan("tel:4155551212") //電話
new URLSpan("mailto:webmaster@google.com") //E-mail
new URLSpan("http://www.baidu.com")//URL
new URLSpan("sms:4155551212") // SMS
new URLSpan("sms:4155551212") //MMS
new URLSpan("geo:38.899533,-77.036476") //地圖

這邊使用URL連結,所以只將URL放入即可start 與 end 是文字中需要連結的部分,這裏將文字 here 設為連結。flags 填入 Spanned.SPAN_EXCLUSIVE_EXCLUSIVEsp.setSpan(new URLSpan("www.androidjackliao.blogspot.tw"), 6, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

最後記得將TextView setMovementMethod 設置 LinkMovementMethod.getInstance()
就是讓你的文字可以點擊
text_view.setMovementMethod(LinkMovementMethod.getInstance());


2015年8月12日 星期三

Android DB 文件權限錯誤解決



有個專案碰到需要在android寫DB,但是因為硬體是客戶自己開發,所以常常會造成DB檔案權限問題而無法開啟,所以將.db副檔名的檔案權限全開(777)

但是有時候又會遇到
unable to open database file (code 14): , while compiling: PRAGMA journal_mode
就再也打不開DB啦!!
困擾了很久才知道,android db 除了建立db檔之外還會建立一個 .db-journal 是一個類似日誌檔,記錄DB所遇到的問題。
但是因為我沒有開啟它的權限,導致我也無法開啟我的DB檔,所以也必須將這個檔案開啟777模式。

777模式開啟方法如下:

File  file = new File("your file path");
file.setExecutable(true, false);
file.setReadable(true, false);

file.setWritable(true, false);

2015年3月26日 星期四

Android DDMS Eclipse 查詢程式執行時所使用記憶體

手機不像web,在執行時消耗太多記憶體會導致,"Out Of Memory" 的錯誤發生。
所以在執行app 開發時,有時必須有效管理記憶體的使用量,這時候就可以使用Android 的 DDMS
可以在 sdk/tools/ddms 找到
或是使用 Eclipse Window/Open  Perspective  > DDMS
此時會看到 DDMS 視窗,選到 Heap view

2015年1月30日 星期五

Android ListView 滾動頓頓卡卡的

如果再使用ListView 滑動時會頓頓卡卡的,那就檢查ListView Layout  layout_width與layout_height 的設置,或許把它改為 match_parent 就可以解決這問題囉。

<ListView
        android:id=“@+id/listview”
        android:layout_width=“match_parent
        android:layout_height=“match_parent
 />

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

2014年12月26日 星期五

Android 取得 public key(RSA key)

private final PackageManager packageManager = context.getPackageManager();
private final List<PackageInfopackageList = packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);


for (PackageInfo p : packageList) {
    for (final Signature sig : p.signatures) {
        X509Certificate x509Cert;
        try {
            x509Cert = (X509Certificate) CertificateFactory.getInstance("X509")
            .generateCertificate(new ByteArrayInputStream(sig.toByteArray()));
           
           Log.i("msg","Public Key:"+ x509Cert.getPublicKey().toString());
        }
        catch (CertificateException e) {
            e.printStackTrace();
        }
    }
}

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

2014年12月22日 星期一

Android 呼叫其他應用程式(A呼叫B)

由A應用程式 呼叫 B應用程式

最簡單的方法就是使用
getPackageManager().getLaunchIntentForPackage("被呼叫的應用程式 package name");


Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.callapp");

startActivity(intent);

如果需要進入到B應用程式指定的Activity

2014年11月18日 星期二

Android 下拉更新,上拉載入的 OnScrollListener

boolean onLoad = false, onUpdata = fasle;

listView.setOnScrollListener(new OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
                if (onUpdata) {
                        //拉到頂時的程式處理
                }

2014年7月30日 星期三

Android 取得目前畫面最上層package name

ActivityManager mActivityManager
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);

rti.get(0).topActivity.getPackageName();

AndroidManifest.xml必須加上
<uses-permission android:name="android.permission.GET_TASKS" />

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

2014年7月10日 星期四

Android 按Home鍵 直接開啟 APP

在AndroidManifest.xml 中增加下段程式即可

<intent-filter >
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

2014年2月11日 星期二

Android 時間倒數

endTime 為倒數時間
step 每次倒數時間
(以毫秒為單位,例:30秒為 30000)

new CountDownTimer(endTime, step) {

    @Override
    public void onFinish() {
        //倒數完畢執行
        textview.setText("倒數完畢");
    }

    @Override
    public void onTick(long millisUntilFinished) {
        //每次倒數要做的事

        textview.setText("倒數"+ millisUntilFinished / 1000 + "秒");
    }


}.start();

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

2013年12月31日 星期二

Android 從程式中刪除程式(apk,package)

從程式中刪除自己或其他程式

/* 先找出欲刪除的Package Name */
PackageManager manager = context.getPackageManager();
Intent intent = new Intent().setPackage(PACKAGE_NAME);
List<ResolveInfo> infos = manager.queryIntentActivities(intent,PackageManager.GET_INTENT_FILTERS);

2013年12月6日 星期五

Android 避免螢幕選轉,而造成資料流失

在java中加入這段
@Override
public void onConfigurationChanged(Configuration newConfig){
   super.onConfigurationChanged(newConfig);
}

與AndroidMaifest.xml加入這段就好啦~
android:configChanges="orientation|screenSize"

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

Android ListView 分隔線

<ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:cacheColorHint="#00000000"  //list在滑動時的背景顏色,這裡設為透明
            android:divider="@drawable/bar"  //這裡指定分隔線的圖示,或直接設顏色也可以
            android:dividerHeight="5sp"  //分隔線的高度
            android:scrollbarTrackVertical="@android:color/transparent" />

如果此篇對您有幫助,您可以點選廣告給予最大的動力,感謝您的收看。

2013年12月2日 星期一

2013年11月1日 星期五

Android 開機自動執行

開機時,系統會發出一個系統廣播(ACTION_BOOT_COMPLETED),
它的字串常量表示為 android.intent.action.BOOT_COMPLETED
只要在程式中接收到這個消息,就可以讓他啟動我們的程式了。
所以我們要做一個BroadcastReceiver來接收這個訊息

記得在AndroidManifest.xml中加入請求權限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>