Dear Friends,

I was reading a lot about Orb and how great it is to stream Media direct from my PC to my Mobile.
Anyway I did not found an APP for my Android G1 and as I was reading there is no APP from ORB to expect till June.

As I am a Coder I was unable to wait. Especialy I am a Newbie in learning Android (usually PHP COder), that was a little challenge for me to do.

Finaly I got a small Version to work that I like to share with you. Its not at all a real Orb Client as you may expect, but it works for me to scan for all my Video Media that I shared in my Orb, let it display in a Listview and when I click on one of the Titles it starts playing :)

Btw. I was only able to test it with a WIFI Network.

There are several improvments to do. Like:
- a selection for Audio, Photos, Documents, Playlists …
- a Thread that the loading happens in the Background
- a Setup Feature to store and change Userid, Password and APiKey.

But as I make it opensource you can help to improve it.

The most work for me was to understand and test out the API Function from ORB.
Also when there is a API Description from ORB http://developer.orb.com
it was not always really understandable how to do.

You may like to change the Code as you like. Remember when you publish it into the Market
you need a Commercial APi Key from ORb. Yes, I know on Orb is written you need a Commercial Key when
you like to make Money from it or it is business in any other way. Finaly I thought to make it freeware
but after I nice Talk with Luc Julia from Orb he told me: “Remember that you can’t distribute an application using a developer key, it will be invalidated. You need to get a commercial key for that purpose.”

I asked 3 Times but at all it looks for any Case you publish it you need commercial key.

Ok, here is my Prework and I hope you can use it for your Purposes.
Btw: I called it “OrbAnd” :)

You can download the full OrbAnd Source here (prepared for SDK1.1 and Eclipse)

Yours
Chris

–Orband.Java


/*
 * OrbAnd 0.1 Alpha
 *
 * Copyright (C) 2009 Christian Albert Müller
 * http://www.christian-albert-mueller.com
 *
 * This Source Code is Freeware, OpenSource as you like to call it.
 * I do not take any responsibility for its usage and also I dont have
 * Time to explain the Source.
 *
 * If you like to Develop this Version you are welcome to send me your
 * Updates and I will check them and keep the right to publish it for
 * other Users on my Page.
 *
 * If you can make some Explanations for other Users may be helpful.
 *
 * Should you distribute this Version you need a Commercial Key from Orb
 *
 * I am not related with ORB and its not an official Work from ORB
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *
 * You can extend this Copyright with your Changes and keep Responsible
 * for your Work.
 *
 *
 * To start:
 * - go to: https://mycast.orb.com/orb/html/createAPIKey.html
 *   - Enter your ORB Login and request an Developer API Key
 *   - Enter your Login, Password and API Key into the Source Code Bellow
 *   - Compile the Source ... and Enjoy Orb on your Android Mobile :)
 *
 * Infos about Error Codes and XML Requests at: http://developer.orb.com
 *
 */

package com.development.orband;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;

import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;

import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Orband extends ListActivity
{
	/** Called when the activity is first created. */

	private static final String TAG = "Orband";

	String Username = "yourUsername";
	String Password = "yourPassword";
	String apikey   = "yourApiKey";

	String html;
	String dummystr;
	String sid;

	//Initializing the ListView
	private ArrayAdapter<String> mAdapter;
	private ArrayList<String> mStrings = new ArrayList<String>();

	//Just a small Status Line in the Top
	TextView toptext;

	static int countlistentries;
	static Bitmap[] inipics;

	//ArrayList for Orb Responses (MediaTitle, Url ...)
	ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
	HashMap<String,String> item = new HashMap<String,String>(); 

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		toptext = (TextView) findViewById(R.id.toptext);

		mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mStrings);

		setListAdapter(mAdapter);
		ListView MyOrbList = getListView();

		MyOrbList.setOnItemClickListener(new OnItemClickListener()
		{
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id)
			{
				String Mid =   list.get(position).get("id");

				//Get STREAM Information
				html = loaddata("http://api.orb.com/orb/xml/stream?sid="+sid+"&mediumId="+Mid+"&streamFormat=3gp&type=pda&width=480&height=360");

				int status = Integer.parseInt(GetXmlInnerNr("status", "code", html, 1));
				String uril = GetXmlInnerNr("item","url",html,1);

				Toast.makeText(Orband.this, "Status: "+status+" URL: "+uril,Toast.LENGTH_SHORT).show();

				if (status == 0)
				{
					Intent i = new Intent(Intent.ACTION_VIEW);
					Uri u = Uri.parse(uril);
					i.setData(u);
					startActivity(i);
				}

			}
		});

		do_main();

	}

	private void do_main()
	{

		Log.i(TAG, " *------ Login Orb -----*: ");
		html = loaddata("http://api.orb.com/orb/xml/session.login?apiKey="+apikey+"&l="+Username+"&password="+Password+"");

		int status = Integer.parseInt(GetXmlInnerNr("status", "code", html, 1));
		sid = GetXmlNr("orbSessionId", html, 1);
		toptext.setText("sid:" + sid + " status:" + status);

		if (status == 0)
		{

			Log.i(TAG, " *------ Load Media Data-----*: ");
			html = loaddata("http://api.orb.com/orb/xml/media.search?sid="+ sid + "&q=mediaType%3Dvideo&groupBy=author");

			// for AUDIO just change the Line above with this
			// html = loaddata("http://api.orb.com/orb/xml/media.search?sid="+ sid + "&q=mediaType%3Daudio&groupBy=author");

			status = Integer.parseInt(GetXmlInnerNr("status", "code", html, 1));
			Log.i(TAG, " *------ Media Result Status: " + status);

			if (status != 0)
			{
				toptext.setText("Status Error (2) : " + status);
			} else
			{
				int results = Integer.parseInt(GetXmlInnerNr("searchResult","itemCount", html, 1));
				//String ausgabe = "" + results + " Ergebnisse\n";
				Log.i(TAG, " *------ Media Result add 1: ");
				for (int i = 0; i < results; i++)
				{
					dummystr=GetXmlNr("field name=\"title\"", html, i);
					mAdapter.add(dummystr);
					item = new HashMap<String,String>();
					item.clear();
					item.put("title",dummystr);
					item.put("id",GetXmlInnerNr("item","orbMediumId", html, i));
					list.add(item);
				}
				Log.i(TAG, " *------ Media Result add 2: ");
			}
		} else
		{
			toptext.setText("Status Error (1) : " + status);
		}
	}

	private String loaddata(String Urli)
	{
		try
		{

			String mediaUrl = Urli;
			URLConnection conn;
			conn = new URL(mediaUrl).openConnection();

			InputStream is = conn.getInputStream();
			BufferedInputStream bis = new BufferedInputStream(is);
			ByteArrayBuffer baf = new ByteArrayBuffer(50);

			// loading part
			int current = 0;
			while ((current = bis.read()) != -1)
			{
				baf.append((byte) current);
			}
			// Log.i(TAG, " *------ Load Data done -----*: ");
			html = EncodingUtils.getString(baf.toByteArray(), "UTF-8");
			// ------
		} catch (Exception e)
		{
			Toast.makeText(this, "Shit, Loading Error!", Toast.LENGTH_SHORT).show();
		}

		return html;
	}

	public String GetXmlNr(String xtag, String xhtml, int pos)
	{
		// Log.i(TAG, " *xhtml: " + xhtml);
		String x1tag = "";
		String x2tag = "";
		String retstr = "";
		int xstart = 0;
		int dummy = 0;
		int xend = 0;
		int xcont = 0;
		int xcounter = 0;

		x1tag = "<" + xtag;
		dummy = xtag.indexOf(" ");
		if (dummy != -1)
			xtag = xtag.substring(0, dummy);
		x2tag = "</" + xtag + ">";

		do
		{
			xcounter++;
			xhtml = xhtml.substring(xcont);
			xstart = xhtml.indexOf(x1tag);
			// Log.i(TAG, " *xstart1: " + xstart);
			xstart = xhtml.indexOf(">", xstart);
			if (xstart < 0)
				return "";
			xend = xhtml.indexOf(x2tag, xstart);
			if (xend < 0)
				return "";

			retstr = xhtml.substring(xstart + 1, xend);

			xcont = xend + x2tag.length();

		} while (xcounter < pos);

		return retstr;
	}

	public String GetXmlInnerNr(String xtag, String Attrib, String xhtml,
			int pos)
	{

		String x1tag;
		int x1len;
		String x2tag;
		String retstr;
		int xstart;
		int xend;
		int xcont = 0;
		int xcounter = 0;

		do
		{
			xcounter++;
			xhtml = xhtml.substring(xcont);
			// Log.i(TAG, "* xhtml: " + xhtml);
			x1tag = "<" + xtag;
			x1len = x1tag.length();
			x2tag = ">";

			xstart = xhtml.indexOf(x1tag);
			if (xstart < 0)
				return "";

			xend = xhtml.indexOf(x2tag, xstart);
			if (xend < 0)
				return "";

			// Log.i(TAG, "* xstart: " + xstart + " xend: " + xend);

			String Innerhtml = xhtml.substring(xstart + x1len, xend);

			// now search in the innerarea
			x1tag = Attrib + "=\"";
			x2tag = "\"";
			x1len = x1tag.length();
			xstart = Innerhtml.indexOf(x1tag);

			if (xstart < 0)
				return "";

			xcont = xend + 1;

			xend = Innerhtml.indexOf(x2tag, xstart + x1len);
			if (xend < 0)
				return "";
			retstr = Innerhtml.substring(xstart + x1len, xend);
			;

		} while (xcounter < pos);

		return retstr;
	}

}

— and here the Main.XML


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:id="@+id/toptext"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<ListView android:id="@android:id/list"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:transcriptMode="normal"/>

</LinearLayout>
<div>

—AndroidManifext.XML


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.development.orband"
android:versionCode="1"
android:versionName="1.0.0">
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Orband"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

Category: android  Tags: , , ,
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
3 Responses
  1. jim loftin says:

    i b a 60yr old fart learning everyday. want to set up my g-1 to stream tv i read & did everthing you said. if i understand if i am not going to use this key for profit but use it myself i do not need a key. is that correct ? i have not got the key yet !!
    i downloaded the lines of script above this and saved the file to my desktop. i dont have a clue what to do with that file or how to make the orb software work yet.
    i do this for my 8 yr old grandson where he can watch cartoons on my phone. if you could please advise me i will thak you now in advance

    jim loftin
    jimloftin@yahoo.com

    //from Admin:
    Jim your are more than welcome! I will send you my last Beta APK so you dont have to compile yourself. Enjoy the Application. Greets Chris

  2. Maff says:

    Would it be possible for me to also get the latest Beta APK?
    I have no idea about programming so would have no idea how to compile this!

    thanks

    maff@mace-media.co.uk

  3. admin says:

    Hi Maff,
    just have a look at: http://christian-albert-mueller.com/blog/orb-for-android-g1-androrb-03a/ there you can download it :)
    Chris

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>