- リハビリテーション時間を明るくする
- メッセージ配信の問題を解決する
- Javaプログラムを書いてみてください
猫の下で行われたjava治療の結果。
私はJavaでプログラミングしたことがないという事実から始めたいので、私のアプリケーションの天才であるふりをしません。
笑い、快適になり、充電を近づけた後、私はこの素晴らしい言語で最初のアプリケーションを開始しました。
私が最初にやることを決めたのは、通知者用のフレームを作成することでした。 必要なのは、メッセージをポップアップするシンプルなトレイメニューだけでした。
// PopupMenu popup = new PopupMenu(); // MenuItem exitItem = new MenuItem(""); // exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); // popup.add(exitItem); SystemTray systemTray = SystemTray.getSystemTray(); Image image = Toolkit.getDefaultToolkit().getImage("vk_icon.png"); TrayIcon trayIcon = new TrayIcon(image,"VKNotifer",popup); trayIcon.setImageAutoSize(true); // systemTray.add(trayIcon); // trayIcon.displayMessage("VKNotifer", "",TrayIcon.MessageType.INFO);
現在の主なタスクは、現在のメッセージのリストを取得することです。 この目的のために、提供されたapk Vkontakteを使用しました。 apiの基本情報は、 こちらで確認できます 。
apiを使用できるようにするために最初に行うことは、Vkontakteアプリケーションを作成することです 。その後、トークンを受け取るために必要なアプリケーションのIDを受け取ります。
APIにアクセスする2番目のステップは、トークン自体を取得することです。 これを行うには、アプリケーションで次の手順を実行する必要があります。
- ログイン
- 要求された要件の確認
- トークンを直接取得する
その後、トークンのおかげで、APIメソッドを実行できます。 認証プロセスについては、 こちらをご覧ください。
これらの目的のために、VKapiクラスを作成しました。このクラスには、トークンの取得とメッセージのリストの取得という2つのメソッドがあります。
方法1-トークンの取得:
HttpClient httpClient = new DefaultHttpClient(); // HttpPost post = new HttpPost("http://oauth.vk.com/authorize?" + "client_id="+client_id+ "&scope="+scope+ "&redirect_uri="+redirect_uri+ "&display="+display+ "&response_type="+response_type); HttpResponse response; response = httpClient.execute(post); post.abort(); // String HeaderLocation = response.getFirstHeader("location").getValue(); URI RedirectUri = new URI(HeaderLocation); // //ip_h to_h String ip_h= RedirectUri.getQuery().split("&")[2].split("=")[1]; String to_h=RedirectUri.getQuery().split("&")[4].split("=")[1]; // post = new HttpPost("https://login.vk.com/?act=login&soft=1"+ "&q=1"+ "&ip_h="+ip_h+ "&from_host=oauth.vk.com"+ "&to="+to_h+ "&expire=0"+ "&email="+email+ "&pass="+pass); response = httpClient.execute(post); post.abort(); // HeaderLocation = response.getFirstHeader("location").getValue(); post = new HttpPost(HeaderLocation); // response = httpClient.execute(post); post.abort(); // HeaderLocation = response.getFirstHeader("location").getValue(); // post = new HttpPost(HeaderLocation); response = httpClient.execute(post); post.abort(); // HeaderLocation = response.getFirstHeader("location").getValue(); // access_token = HeaderLocation.split("#")[1].split("&")[0].split("=")[1];
メッセージAPIのリストを取得するには、Vkontakteにはmessages.getメソッドがあります
方法2-メッセージのリストを取得する:
// String url = "https://api.vk.com/method/"+ "messages.get"+ "?out=0"+ "&access_token="+access_token ; String line = ""; try { URL url2 = new URL(url); BufferedReader reader = new BufferedReader(new InputStreamReader(url2.openStream())); line = reader.readLine(); reader.close(); } catch (MalformedURLException e) { // ... } catch (IOException e) { // ... } return line;
クラス全体:
public class VKapi { private String client_id = "2971510"; private String scope = "messages"; private String redirect_uri = "http://oauth.vk.com/blank.html"; private String display = "popup"; private String response_type = "token"; private String access_token; private String email = "******";// email private String pass = "******";// public void setConnection() throws IOException, URISyntaxException { // token'a } public String getNewMessage() throws ClientProtocolException, IOException, NoSuchAlgorithmException, URISyntaxException { // } }
あとは、クラスをインスタンス化し、トークンを取得し、無限ループでメッセージリストを受信するだけです。 新しく受信したリストが前のものと異なる場合、新しいメッセージの通知を表示します。
その結果、以下が得られます。
public static void main(String[] args) throws IOException, URISyntaxException, AWTException, InterruptedException, NoSuchAlgorithmException { // PopupMenu popup = new PopupMenu(); // MenuItem exitItem = new MenuItem(""); // exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); // popup.add(exitItem); SystemTray systemTray = SystemTray.getSystemTray(); // Image image = Toolkit.getDefaultToolkit().getImage("vk_icon.png"); TrayIcon trayIcon = new TrayIcon(image,"VKNotifer",popup); trayIcon.setImageAutoSize(true); // systemTray.add(trayIcon); trayIcon.displayMessage("VKNotifer", " ",TrayIcon.MessageType.INFO); // VKapi vkAPI = new VKapi(); // vkAPI.setConnection(); trayIcon.displayMessage("VKNotifer", " ",TrayIcon.MessageType.INFO); // String oldMessage = vkAPI.getNewMessage(); String newMessage; int i = 0; for (;;){ // 3 Thread.sleep(3000); // if (i == 15000){ // 45 000 ( , ) vkAPI.setConnection(); // Thread.sleep(3000); // i = 0; } // newMessage = vkAPI.getNewMessage(); if (!newMessage.equals(oldMessage)) { oldMessage = newMessage; trayIcon.displayMessage("VKNotifer", " ",TrayIcon.MessageType.INFO); Tools.playDrum(Drum.d53_Ride_Bell, 127,0); } i++; } }
ポップアップウィンドウに加えて、サウンドアラートも使用されます。
Tools.playDrum(Drum.d53_Ride_Bell, 127,0);
これを行うには、 このトピックのライブラリを使用します
私はこれが理想的なパフォーマンスではないことを知っていますが、最も重要なことはそれが私の問題を完全に解決したことです。 ご清聴ありがとうございました。