การขอ Permission ด้วยไลบรารี SimplePermissions

Permission ในระบบ android แบ่งได้เป็น 2 ชนิดคือ

  • Normal Permission กรณีนี้ไม่จำเป็นต้องขอ Runtime Permission
  • Dangerous Permission จำเป็นต้องขอ Runtime Permission

แต่อย่างไรก็ตาม ต้องขอ Permission ในไฟล์ AndroidManifest.xml ด้วย

Continue reading

การฝัง WebView ในแอพ

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.phaisarn.mywebview">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

package com.phaisarn.mywebview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        WebView webView1 = new WebView(this);
        setContentView(webView1);

        WebSettings webSettings = webView1.getSettings();
        webSettings.setJavaScriptEnabled(true);

        webView1.setWebViewClient(new WebViewClient());

        webView1.loadUrl("http://google.com");
    }
}

บรรทัดที่ 23 กำหนดให้แสดงเว็บเพจในแอพ

Link

การขอหลาย Permission

การขอ Permission หลายๆอย่าง โดยทำการตรวจสอบ ว่า permission ไหนที่ยังไม่มีก็ทำการขอ โดยตัวอย่างเป็นการขอสิทธิเข้าถึงที่เก็บข้อมูล และขอสิทธิเข้าถึงตำแหน่ง

Continue reading

Android/Java การสร้าง RecyclerView

ใช้ RecyclerView แสดงรายการแบบ list ทำให้สามารถแสดงรายการจำนวนมากๆได้

  1. ใช้งาน RecyclerView
  2. ปรับแต่งเส้นคั่นด้วยไลบรารี่ RecyclerView-FlexibleDivider
  3. วาดตัวอักษรด้วยไลบรารี่ TextDrawable

ไฟล์ที่เกี่ยวข้อง

  • build.gradle (Module: app)
  • activity_main.xml
  • MainActivity.java
  • values/colors.xml
  • drawable/item_state.xml
  • layout/custom_layout.xml
  • CustomItem.java
  • CustomHolder.java
  • CustomAdapter.java
Continue reading

สร้างไฟล์ Excel ด้วย C#, NPOI และคลาส NpoiExport

https://www.nuget.org/packages/NPOI/

ติดตั้ง

PM> Install-Package NPOI -Version 2.4.1

Program.cs

using NPOI.HSSF.UserModel;
using System;
using System.Data;
using System.IO;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            var sheet1 = workbook.CreateSheet("Sheet1");
            var sheet2 = workbook.CreateSheet("Sheet2");

            DataTable dt = new DataTable();
            dt.Columns.Add("ชื่อ");
            dt.Columns.Add("Email");
            DataRow row1 = dt.NewRow();
            row1["ชื่อ"] = "Jack";
            row1["Email"] = "mr.phaisarn@gmail.com";
            dt.Rows.Add(row1);
            DataRow row2 = dt.NewRow();
            row2["ชื่อ"] = "Example";
            row2["Email"] = "example@gmail.com";
            dt.Rows.Add(row2);

            string fixedWidthColumn = "0-4000,1-4000,2-6000";
            var exporter = new NpoiExport(fixedWidthColumn);
            exporter.ExportDataTableToWorkbook(dt, "Export_Data");
            exporter.ExportDataTableToWorkbook(dt, "Export_Data2");

            string localFullPath = AppDomain.CurrentDomain.BaseDirectory;
            FileStream FileStreamObject = new System.IO.FileStream(localFullPath + @"Export_Excel.xls", FileMode.Create, FileAccess.Write);
            FileStreamObject.Write(exporter.GetBytes(), 0, exporter.GetBytes().Length);
            FileStreamObject.Close();
        }
    }
}
Continue reading